![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Romikgy |
|
||||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
Воть и у мя созрел вопросик, к ув. гуру
Есть
почему так работает
а так нет
дает такую ошибку
Это сообщение отредактировал(а) Romikgy - 12.1.2007, 16:14 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||||||
|
|||||||||
| PoloS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 29.12.2006 Где: МО, г. Одинцово Репутация: 1 Всего: 5 |
Возможно из за того, что по умолчанию все члены класса - private, и кога ты наследуешь класс, метод operator= не наслеуется в child класс. исправь так
Это сообщение отредактировал(а) PoloS - 12.1.2007, 15:58 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
ИМХО присваивание не должно наследоваться, тк возможно неполное заполнение полей потомка
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Romikgy, чего то в инете ничего подходящего не нашел. Вот помню у Скота Майерса в Правилах программирования на C++ что-то было такое.... Я думаю компилятор и не смотрит добавил ты поля или нет, просто наследование operator= запрещено видимо по тем же причинам, по которым запрещено присвоение предка потомку запрещено.
Это сообщение отредактировал(а) Sartorius - 12.1.2007, 17:01 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Все просто: оператор = (const mystr&) определен для класса RSS, и не определен для класса RStringList.
Компилятор не производит преобразование левого аргумента при поиске подходящей функции. Но ты можешь написать так:
Вот если бы твой оператор = был стандартным оператором присваивания (с соотв. аргументом), то компилятор бы сгенерировал за тебя такой оператор у производного класса. Не рекомендуется писать такие функции в виде оператора присваивания, т.к. строго говоря это не присваивание, а некоторая инициализация. Лучше писать явно: void Init (const mystr&). Вот, кстати, из той же оперы: если определить конструктор RSS(const mystr&), то строить RStringList из mystr все равно без явного написания конструктора не получится. -------------------- ... |
|||
|
||||
| Axxent |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Конструкторы и присваивание не наследуются вообсче. Если уж сильно надо то делаем оператор и в нем вызываем оператор из базового класса.
Это сообщение отредактировал(а) Axxent - 12.1.2007, 18:23 |
|||
|
||||
| Sartorius |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Earnest, у меня
не проходит (VS2005), operator= действительно есть у потомка, только это простой оператор копирования.
PS Intelliscence пишет его прототип как в Base Это сообщение отредактировал(а) Sartorius - 12.1.2007, 18:35 |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
Earnest,
это я уже заметил.... а что еще не наследуется , кроме перегрузки операторов? или это только для оператора присваивания? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Axxent |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Только для присваивания и конструкторов. Впрочем наследовать любые операторы - весьма неблагодарное занятие, возможно некоторые операторы не наследуются принципиально, но все же рекомендуется переопределять в производных классах все имеющиеся операторы.
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
Если кто вспомнит какие либо тонкости , плз пишите.
А так спасибо всем! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |