Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 72 стр.

UptoLike

Составители: 

72
которая отражает поведение того объекта, для которого осуществлялся
вызов. Полиморфное поведение функций обеспечивается поздним свя-
зыванием функций, когда определение того экземпляра одноименных
функций, которому будет передано управление, определяется на этапе
выполнения программы.
Для того, чтобы компонентная функция обеспечивала полиморф-
ное поведение, ее необходимо объявить виртуальной. Для этого в оп-
ределении
функции в классе необходимо указать ключевое слово
virtual.
virtual тип имя_функции (список_формальных параметров)
{тело функции }
Если мы изменим определение функции func1 , объявив ее вирту-
альной, поведение объектов программы изменится.
//Листинг 30. Использование виртуальных функций
class Base
{ …
virtual int func1(int x) {return x*x;}
};
class Child: public Base
{…
virtual int func1(int x) {return x*x*x;}
};
main()
{ Child c;
cout<<c.func2(5); //на экран выводится 62
Base *ptb=new Child;
cout<<ptb->func1(2); //на экран выводится 8
}
В языке С++ позднее связывание реализуется путем поддержки
для каждого объекта таблицы виртуальных функций. Таблица вирту-
альных функций представляет собой массив указателей на реализации
виртуальных функций, доступные для данного объекта. Структура объ-
екта при использовании им виртуальных функций, изображена на
рис.13.
которая отражает поведение того объекта, для которого осуществлялся
вызов. Полиморфное поведение функций обеспечивается поздним свя-
зыванием функций, когда определение того экземпляра одноименных
функций, которому будет передано управление, определяется на этапе
выполнения программы.
      Для того, чтобы компонентная функция обеспечивала полиморф-
ное поведение, ее необходимо объявить виртуальной. Для этого в оп-
ределении функции в классе необходимо указать ключевое слово
virtual.
      virtual тип имя_функции (список_формальных параметров)
           {тело функции }
     Если мы изменим определение функции func1 , объявив ее вирту-
альной, поведение объектов программы изменится.
    //Листинг 30. Использование виртуальных функций
    class Base
    {…
    virtual int func1(int x) {return x*x;}
    };
    class Child: public Base
    {…
    virtual int func1(int x) {return x*x*x;}
    };
    main()
    { Child c;
    cout<func1(2);           //на экран выводится 8
    }
      В языке С++ позднее связывание реализуется путем поддержки
для каждого объекта таблицы виртуальных функций. Таблица вирту-
альных функций представляет собой массив указателей на реализации
виртуальных функций, доступные для данного объекта. Структура объ-
екта при использовании им виртуальных функций, изображена на
рис.13.

                                          72