Не могу перегрузить оператор присваивания = в производном классе (как хочу); вызов из основных переходов к методу оператC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Не могу перегрузить оператор присваивания = в производном классе (как хочу); вызов из основных переходов к методу операт

Сообщение Гость »


Я пытаюсь реализовать класс для матрицы со всеми обычными операциями, просто в качестве упражнения. Я реализовал общие операции (+, -, ·), но моя проблема возникла, когда я попытался реализовать операции нарезки — аналогично Numpy. Например, если я хочу сделать что-то вроде a[2:5,1:3] = b[10:13, 10:12], я пришел к выводу, что мне понадобится какой-то «умный итератор» ' (я не знаю технического названия), которые определяют, как переместить одну строку вниз. У меня есть два класса:
[*]MatrixIterator: базовый класс с указателем и индексами на подматрицу, которую они представляют (может быть всей матрицей). [*]Matrix: производный класс от MatrixIterator, у которого унаследованы почти те же операторы, с той разницей, что в конструкторе и деконструкторе выделяется и освобождается часть память, содержащая матричный массив.
Проблема возникла, когда я понял, что оператор присваивания = должен быть разным для обоих классов. Потому что если я хочу сделать что-то вроде a = b, мне нужно просто уничтожить выделенный массив в a и выполнить «повторную инициализацию» с данными >b (в случае изменения размеров); что, как я понял, нужно делать «вручную». Но с a[2:5,1:3] = b[10:13, 10:12] я просто присваиваю элемент элементу без «повторной инициализации».

В итоге у меня получилось что-то вроде

#include #include #include //Базовый класс шаблон класс MatrixIterator { публика: МатрицаИтератор(); MatrixIterator& оператор=(const MatrixIterator& b); }; //Производный класс шаблон класс Matrix: public MatrixIterator { используя базу = MatrixIterator; публика: Матрица(); Матрица& оператор=(const MatrixIterator& b); }; шаблон MatrixIterator::MatrixIterator() { } шаблон MatrixIterator& MatrixIterator::operator=(const MatrixIterator& b) { std::cout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»