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


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


Виртуальность обеспечивает возможность написания полиморфной функции, в теле которой вызываются виртуальные методы.

Принципиально виртуальный метод от не виртуального отличается механизмом позднего связывания , применяемым для организации вызова виртуального метода. Во многих языках программирования методы могут быть как виртуальными, так и, в большинстве случаев, не виртуальными. В языке VBA это не так, здесь практически все методы виртуальные и для них применяется механизм позднего связывания. Это и понятно, поскольку VBA по существу интерпретируемый язык, а интерпретация подразумевает позднее связывание. Поэтому, чтобы Вы почувствовали разницу между виртуальными и не виртуальными методами, позвольте привести один пример на языке Visual C++. Рассмотрим следующий пример. Пусть имеются базовый класс Base и производный от него класс Derived, в которых определены виртуальный метод VirtMethod и невиртуальный метод NonVirtMethod. В базовом классе определена также полиморфная функция Test:

class Base { public: virtual void VirtMethod (); // печатает слово" Отец" void NonVirtMethod (); // печатает слово" Мать"

void Test () { VirtMethod (); // вызов виртуального метода NonVirtMethod (); // вызов не виртуального метода } }

class Derived: public Base { public: virtual void VirtMethod (); // печатает слово" Сын"

void NonVirtMethod (); // печатает слово" Дочь" }

Когда компилятор в базовом классе Base создает код для функции Test, то, анализируя вызов не виртуального метода NonVirtMethod(), он уже на этапе компиляции создаст обращение к методу NonVirtMethod класса Base.

Совсем иначе он поступит, анализируя вызов виртуального метода VirtMethod. Для виртуального метода на этапе компиляции нельзя определить, метод какого класса следует вызывать. Это может быть метод класса Base или класса Derived. Возможно даже, что уже после того, как функция Test будет откомпилирована, программист определит новый класс - потомок класса Derived со своим виртуальным методом VirtMethod.




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



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