Рубрики

C ++ | Виртуальные функции | Вопрос 12

Предсказать вывод следующей программы на C ++. Предположим, что нет выравнивания и типичная реализация виртуальных функций выполняется компилятором.

#include <iostream>

using namespace std;

  

class A

{

public:

    virtual void fun();

};

  

class B

{

public:

   void fun();

};

  

int main()

{

    int a = sizeof(A), b = sizeof(B);

    if (a == b) cout << "a == b";

    else if (a > b) cout << "a > b";

    else cout << "a < b";

    return 0;

}

(А) а> б
(B) a == b
(С) а <б
(D) Ошибка компилятора

Ответ: (А)
Пояснение: Класс A имеет VPTR, которого нет в классе B.

В типичной реализации виртуальных функций компилятор размещает VPTR с каждым объектом. Компилятор тайно добавляет код в каждый конструктор к этому.

Рекомендуемые посты:

C ++ | Виртуальные функции | Вопрос 12

0.00 (0%) 0 votes