Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Оператор присваивания наследуется? |
Автор: Dims 22.12.2009, 19:23 | ||
Почему не наследуется оператор присваивания в данном примере?
|
Автор: mes 22.12.2009, 19:42 |
http://forum.vingrad.ru/index.php?showtopic=268422&view=findpost&p=1933714 |
Автор: Dims 22.12.2009, 19:48 |
Спасибо! Так я не понял, using в такой функции уже сделали что ли? |
Автор: mes 22.12.2009, 19:51 |
если в наследнике хотите использовать оператор присваивания предка, то поможет using, иначе его не будет видно, по причине указанной в цитате по ссылке. ![]() P.S. причина в том, что обсуждаемый оператор специальный и на него распространяются некоторые обязательства, в частности то, что этот оператор для каждого класса будет неявно сгенерирован компилятором, если пользователь не опишет его явно. |
Автор: Dims 24.12.2009, 22:29 | ||
Ха! Вроде бы using помогает не полностью! Вопрос снова открыт! Вот пример
|
Автор: mes 25.12.2009, 00:40 |
ну тут проблема уже не с оператором присваивания, а с конструктором.. они в текущем стандарте не наследуются.. Можно узнать зачем такое извращение ? думаю должен быть способ достичь цели более естественным путем. ![]() |
Автор: Dims 27.12.2009, 10:49 |
Какой именно конструктор тут не отнаследовался? Не извращение, а нормальное для ООП желание использовать наследование... Я хочу завернуть интерфейсы DirectShow в свои классы так, чтобы было проще ими пользоваться... |
Автор: Dims 29.12.2009, 23:00 |
Разве компилятор не генерит его автоматически? |
Автор: bsa 30.12.2009, 11:45 |
А с какого это бодуна он должен генерировать подобное? Автоматически генерятся R3::R3(const R3 &) и R3& R3::operator=(const R3&), если не объявлены явно. |
Автор: mes 30.12.2009, 13:29 |
добавлю к bsa, что в общем случае это невозможно - построить наследника на основе базового класса, так как наследник может обладать доп. данными. ну а частные случаи, когда наследники, просто "оборачивают" базовый класс, не являются достаточным основанием для (исключительной из общего правила) генерации. |
Автор: Dims 30.12.2009, 22:03 |
В общем, если суммировать, то следует просто сказать, что оператор присваивания не наследуется и using делу не поможет. |
Автор: mes 30.12.2009, 23:17 | ||
ну если закрыть глаза на правду, то можно и так просуммировать.. ![]() в предыдущих постах ответ дан.. к тому же оператор присваивания наследуется.. хотя он тут абсолютно не при чем, так как не участвует в создании объекта. важен тип результата этого оператора, по которому Вы пытатесь создать новый экземпляр. в теме мало информации о Ваших задаче и целях, но попробую предположить, что для решения Вашей может подойти CRTP : http://insidecpp.ru/patterns/curiously_recurring_template_pattern/ |