![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Почему не наследуется оператор присваивания в данном примере?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Спасибо! Так я не понял, using в такой функции уже сделали что ли?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если в наследнике хотите использовать оператор присваивания предка, то поможет using, иначе его не будет видно, по причине указанной в цитате по ссылке. ![]() P.S. причина в том, что обсуждаемый оператор специальный и на него распространяются некоторые обязательства, в частности то, что этот оператор для каждого класса будет неявно сгенерирован компилятором, если пользователь не опишет его явно. Это сообщение отредактировал(а) mes - 22.12.2009, 19:55 |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Ха! Вроде бы using помогает не полностью! Вопрос снова открыт!
Вот пример
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну тут проблема уже не с оператором присваивания, а с конструктором.. они в текущем стандарте не наследуются.. Можно узнать зачем такое извращение ? думаю должен быть способ достичь цели более естественным путем. ![]() |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
А с какого это бодуна он должен генерировать подобное? Автоматически генерятся R3::R3(const R3 &) и R3& R3::operator=(const R3&), если не объявлены явно. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
добавлю к bsa, что в общем случае это невозможно - построить наследника на основе базового класса, так как наследник может обладать доп. данными. ну а частные случаи, когда наследники, просто "оборачивают" базовый класс, не являются достаточным основанием для (исключительной из общего правила) генерации. |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
В общем, если суммировать, то следует просто сказать, что оператор присваивания не наследуется и using делу не поможет.
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну если закрыть глаза на правду, то можно и так просуммировать.. ![]() в предыдущих постах ответ дан.. к тому же оператор присваивания наследуется.. хотя он тут абсолютно не при чем, так как не участвует в создании объекта. важен тип результата этого оператора, по которому Вы пытатесь создать новый экземпляр. в теме мало информации о Ваших задаче и целях, но попробую предположить, что для решения Вашей может подойти CRTP : http://insidecpp.ru/patterns/curiously_rec...mplate_pattern/ Это сообщение отредактировал(а) mes - 30.12.2009, 23:25 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |