Пожалуйста, просмотрите, как работает компилятор с полиморфизмом [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пожалуйста, просмотрите, как работает компилятор с полиморфизмом [закрыто]

Сообщение Anonymous »

может ли кто -нибудь просмотреть процедуру ниже и сообщить мне, если есть что -то неправильное? Спасибо!
class A {
public:
virtual ~A() {}
virtual void foo() { std::cout
Шаг 2: Если мы попытаемся вызвать функцию ( скажем, func () ), используя указатель, созданный* ptr_a = new c ()

Если Функция не виртационна в иерархии наследования между и c , ptr_a-> func () вызовы, которые объявлены в на основе статического типа.

[*] Если функция является виртуальной: во время компиляции, компилятор определяет, какие функции доступны через статический тип ptr_a (т.е. все общедоступные/защищенные Виртуальные функции, объявленные в , доступны).

[*] Если функция доступна во время компиляции, мы ищем имя функции в VTable и определите, какая конкретная реализация виртуальной функции выполняется. Указатель такой: c* ptr_c = dynamic_cast (ptr_a);

Сначала проверьте, если ptr_c null. Если (1) C не является потомком a или if (2) Все предки C не полиморфные, то Dynamic_cast возвращает null.

[*] Если ptr_c не является нулевым, во время выполнения, dynamic_cast предоставляет доступ ко всем публичным/защищенным функциям, объявленным в C , и в тех унаследован от предков C (A и b ).

[/list]
ожидание:
C::bar
B::foo


Подробнее здесь: https://stackoverflow.com/questions/794 ... lymorphism
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»