Основы офисного программирования и язык VBA


Виртуальные методы и полиморфизм - часть 3


Решение о том, метод какого класса следует вызывать, откладывается до момента вызова функции Test. Решение принимается не на этапе компиляции, а на этапе выполнения программы. В момент вызова виртуального метода, используя таблицу виртуальных методов, выполняется необходимое связывание и вызывается требуемый метод соответствующего класса. Закончим наш пример объявлением объектов базового и производного классов и вызовами функции Test с этими объектами в качестве фактических параметров:

// При создании объекта BaseItem вызывается конструктор класса Base. Base BaseItem; // При создании объекта DerivedItem вызывается конструктор класса Derived Derived DerivedItem; // Вызов функции Test BaseItem.Test(); // Будет напечатано "Отец" и "Мать" DerivedItem.Test(); // Будет напечатано "Сын" и "Мать".

Функция Test является примером полиморфной функции. Заметьте: она имеет по умолчанию первым параметром указатель на объект базового класса (this). Продолжим рассмотрение нашего примера и покажем, как указатели обеспечивают полиморфизм:

// Полиморфные указатели pItem1 и pItem2 ссылаются на базовый класс Base. // Вызывается конструктор и создается динамический объект класса Base. Base* pItem1 = new Base(); // Вызывается конструктор и создается динамический объект класса Derived Base* pItem2 = new Derived();

// Будет вызван метод класса Base и напечатано слово "Отец". pItem1 ->VirtMethod(); // Будет вызван метод класса Derived и напечатано слово "Сын". pItem2 -> VirtMethod();

Теперь мы можем уточнить понятие полиморфизма семейства классов. Заметьте, что полиморфизм связан именно с семейством классов. Внутри одного класса могут существовать перегруженные методы, но не полиморфные. Виртуальный метод, определенный в базовом и производных классах с одним и тем же именем и одним и тем же набором параметров, но с разной реализацией, называется полиморфным. Такой метод существует во множестве форм. Функция, имеющая в качестве параметра объект базового класса и вызывающая виртуальные методы этого объекта, также называется полиморфной.Она работает по-разному в зависимости от того, какой объект передан ей в качестве фактического параметра. Полиморфным называется и указатель базового класса, вызывающий виртуальные методы. Полиморфизм такого указателя обеспечивается за счет того, что указатель может быть связан с объектом любого из производных классов. Семейство классов обладает свойством полиморфизма, если в нем реализованы полиморфные функции и полиморфные указатели.




Начало  Назад  Вперед



Книжный магазин