Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.10.130] |
|
Сообщ.
#1
,
|
|
|
Не очень понимаю механизм ссылок в случае наследования.
В первом примере ссылка на виртуальную функцию, во втором - обычная виртуальная функция. Хотелось бы вызвать метод потомка по ссылке (если вообще такое бывает). Так (1)... struct a { virtual char & plus ( ) = 0; char take ( ) { return plus ( ); } }; struct b : a { char & plus ( ) { char c = 7; return c; } }; void main ( ) { b e; char r = e.take ( ); } struct a { virtual char plus ( ) = 0; char take ( ) { return plus ( ); } }; struct b : a { char plus ( ) { char c = 7; return c; } }; void main ( ) { b e; char r = e.take ( ); } Чем принципиально отличаются примеры? Будет ли в первом случае создаваться таблица виртуальных функций? Охота сделать так чтоб при компиляции была доступна максимальная оптимизация. |
Сообщ.
#2
,
|
|
|
В первом варианте plus() возвращает ссылку на char, во втором - возвращает char по значению.
А так как в первом случае из функции возвращается ссылка на локальную переменную, то это еще и неопределенное поведение. P.S. ссылки на функцию ни в одном из примеров нет! |
Сообщ.
#3
,
|
|
|
Цитата FateFlex @ Чем принципиально отличаются примеры? Будет ли в первом случае создаваться таблица виртуальных функций? Охота сделать так чтоб при компиляции была доступна максимальная оптимизация. она будет создана в обоих случаях, и там и там определяются вирт. функции. |