Не могу перегрузить оператор присваивания = в производном классе (как хочу); вызов из основных переходов к методу операт ⇐ 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
Я пытаюсь реализовать класс для матрицы со всеми обычными операциями, просто в качестве упражнения. Я реализовал общие операции (+, -, ·), но моя проблема возникла, когда я попытался реализовать операции нарезки — аналогично 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как создать словарь объединенных переходов DFA на основе переходов DFA1 и DFA2
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-