|
ссылка на класс, то подразумеваем, что это ссылка на VMT класса. Имея ссылку на класс, можно вызвать виртуальный конструктор, или классовый виртуальный метод (в Дельфи это соответствует class function xxx(); virtual;) В СИ++ этому бы соотвествовало определение метода, снабженного впереди классификаторами virtual static (но такую комбинацию, к несчастью, тоже нельзя на Си++ сварганить; а жаль, поскольку такие методы можно вызывать до того, как содан экземпляр класса и они при этом сохраняют свою виртуальность).
Приведу простой пример. Пусть у нас есть класс "Геометрическая фигура". Пусть у этого класса определена статическая виртуальная функция "количество углов". Далее мы описали классы "квадрат", "прямоугольник", "треугольник", "круг", ... и для каждого из создали функцию "количество углов". Здесь замечу, что очевидно, что чтобы узнать количество углов, не надо создавать экземпляра класса. Теперь пусть у нас есть переменная A, описанная как ССЫЛКА на класс "геометрическая фигура". Теперь мы этой переменной присвоим значение: A="квадрат". (Квадрат еще не создан, просто переменной А присвоено значение, говорящее о том, что А ссылается на класс "квадрат"). После этого кто-то (уже не наше приложение, а какая-нибудь другая задача, или класс, написанный не нами) может взять переменную А и сделать примерно так:
Если А.количество_углов >= 4, то Obj=создать_экземпляр(А);
Вот в переменной Obj уже будет создан экземпляр класса "квадрат" (при условии, что кто-нибудь не изменил за это время значение А на какой-нибудь "треугольник" или "круг").