|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.03.2010, 23:05 | #1 |
Регистрация: 03.03.2010
Сообщений: 3
|
классы, операторы. Проблема this, op= [c++]
Добрый день.
1) В классе существует оператор (), в том же классе я хочу использовать этот оператор для облегчения жизни: Код:
Хорошо, нельзя - значит нельзя (точно нельзя?). 2) Идем другим путем. Код:
- conversion from `cls* const' to non-scalar type `cls' requested - no match for 'operator=' in 'tmp = this' Честно говоря, первой не очень поняла. Немного поискав, я нашла, что действительно используется return *this, но я же оперирую не адресами, но самими объектами, зачем мне возвращать указатель? Хорошо, допустим пусть будет Код:
Причем компилятор мне намекает, что надо бы использовать указатели: note: candidates are: cls& cls::operator=(cls) Нельзя ли обойтись без них? В качестве бонуса компилер выдал Код:
По оператору () у нас возвращается значение внутреннего публичного массива. То есть я не могу так же задать значение тому же элементу массива? Теоретически я догадываюсь, что надо бы задавать по указателю на этот элемент, но что-то не приходит в голову, как. |
04.03.2010, 00:14 | #2 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Код:
Единственная проблема в этом случае, так это тип возвращаемого значения оператора() Код:
Код:
Последний раз редактировалось netrino; 04.03.2010 в 22:38. |
|
04.03.2010, 01:26 | #3 |
Регистрация: 03.03.2010
Сообщений: 3
|
Я этот момент как-то упустила, да. Это многое объясняет.
С возвращением ссылки тоже все просто, как обычно. Задав tmp указателем, компилер перестал ругаться и, кажется, заработало как надо. Спасибо большое. Тогда заодно еще один вопрос: При попытке сделать наследный класс, компилер в конструкторе наследного класса ругается на несовпадение функций для вызова конструктора базового класса. Я, честно говоря, думала, что конструктор наследного класса замещает конструктор базового, поэтому не очень понимаю, что именно требуется. Различается в конструкторах только количество параметров. Код:
|
04.03.2010, 14:42 | #4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Нет, конструкторы не могут замещаться, также как и деструкторы. При создании объекта производного класса последовательно вызываются конструкторы всех его базовых классов и затем конструктор производного. Проблема в том, что нельзя предугадать с какими конкретно параметрами вызывать конструкторы базовых классов, потому по умолчанию компилятор пытается вызвать конструктор без параметров, если такого не существует, то необходимо указывать явно какой конструктор и с какими параметрами вызывать:
Код:
|
09.03.2010, 20:37 | #5 |
Регистрация: 03.03.2010
Сообщений: 3
|
Извиняюсь за лишнее поднятие темы, но долго не было интеренета, не могла ответить сразу.
Большое спасибо за объеснение, разобралась. Видимо, я таки невниметельно читала теорию. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
С# классы проблема с созданием обьекта | bondik | Общие вопросы .NET | 3 | 25.11.2009 10:02 |
Операторы цикла | Paul Oakenfold | Помощь студентам | 10 | 23.03.2009 16:08 |
Операторы прерывания | Иринкаа | Общие вопросы Delphi | 13 | 27.11.2007 21:52 |