Не Вы не поняли. Я специально использовал слово "ссылка на класс" (class reference), а не "указатель на класс" (pointer to class). Когда мы говорим (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено homekvn 29 ноября 2006 г. 16:27
В ответ на: V c++ mozhno ssyke na basovy class prisvoit' ssylku na derived. Vse virtual'nye metody normal'no visyvat'sya budut. V funkciyah tol'ko ispol'zuite func(Base& aa) a ne func(Base a). Po mne tak problem net. отправлено andy_P 29 ноября 2006 г. 15:24

ссылка на класс, то подразумеваем, что это ссылка на VMT класса. Имея ссылку на класс, можно вызвать виртуальный конструктор, или классовый виртуальный метод (в Дельфи это соответствует class function xxx(); virtual;) В СИ++ этому бы соотвествовало определение метода, снабженного впереди классификаторами virtual static (но такую комбинацию, к несчастью, тоже нельзя на Си++ сварганить; а жаль, поскольку такие методы можно вызывать до того, как содан экземпляр класса и они при этом сохраняют свою виртуальность).

Приведу простой пример. Пусть у нас есть класс "Геометрическая фигура". Пусть у этого класса определена статическая виртуальная функция "количество углов". Далее мы описали классы "квадрат", "прямоугольник", "треугольник", "круг", ... и для каждого из создали функцию "количество углов". Здесь замечу, что очевидно, что чтобы узнать количество углов, не надо создавать экземпляра класса. Теперь пусть у нас есть переменная A, описанная как ССЫЛКА на класс "геометрическая фигура". Теперь мы этой переменной присвоим значение: A="квадрат". (Квадрат еще не создан, просто переменной А присвоено значение, говорящее о том, что А ссылается на класс "квадрат"). После этого кто-то (уже не наше приложение, а какая-нибудь другая задача, или класс, написанный не нами) может взять переменную А и сделать примерно так:

Если А.количество_углов >= 4, то Obj=создать_экземпляр(А);

Вот в переменной Obj уже будет создан экземпляр класса "квадрат" (при условии, что кто-нибудь не изменил за это время значение А на какой-нибудь "треугольник" или "круг").

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 45:


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание