На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Ссылки на виртуальные функции , вызов функции потомка по ссылке.
    Не очень понимаю механизм ссылок в случае наследования.
    В первом примере ссылка на виртуальную функцию, во втором - обычная виртуальная функция.
    Хотелось бы вызвать метод потомка по ссылке (если вообще такое бывает).
    Так (1)...
    ExpandedWrap disabled
      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)...
    ExpandedWrap disabled
      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 ( );
      }
    ...работает.
    Чем принципиально отличаются примеры?
    Будет ли в первом случае создаваться таблица виртуальных функций?
    Охота сделать так чтоб при компиляции была доступна максимальная оптимизация.
    Сообщение отредактировано: FateFlex -
      В первом варианте plus() возвращает ссылку на char, во втором - возвращает char по значению.
      А так как в первом случае из функции возвращается ссылка на локальную переменную, то это еще и неопределенное поведение.

      P.S. ссылки на функцию ни в одном из примеров нет!
      Сообщение отредактировано: Kray74 -
        Цитата FateFlex @
        Чем принципиально отличаются примеры?
        Будет ли в первом случае создаваться таблица виртуальных функций?
        Охота сделать так чтоб при компиляции была доступна максимальная оптимизация.

        она будет создана в обоих случаях, и там и там определяются вирт. функции.
        Сообщение отредактировано: Cfon -
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0411 ]   [ 15 queries used ]   [ Generated: 19.05.24, 06:43 GMT ]