Рубрики

Вывод программы C ++ | Комплект 8

Предсказать вывод следующих программ на C ++.

Вопрос 1

#include<iostream>

using namespace std;

  

class Test1

{

    int x;

public:

    void show() {  }

};

  

class Test2

{

    int x;

public:

    virtual void show() {  }

};

  

int main(void)

{

    cout<<sizeof(Test1)<<endl;

    cout<<sizeof(Test2)<<endl;

    return 0;

}

Выход:
4
8
Существует только одно различие между Test1 и Test2. show () не является виртуальным в Test1, но виртуальным в Test2. Когда мы делаем функцию виртуальной, компилятор добавляет дополнительный указатель vptr к объектам класса. Компилятор делает это для достижения полиморфизма во время выполнения (более подробно см. Главу 15 книги « Мышление в C ++» ). Дополнительный указатель vptr добавляет к размеру объектов, поэтому мы получаем 8 как размер Test2.

вопрос 2

#include<iostream>

using namespace std;

class P

{

public:

    virtual void show() = 0;

};

  

class Q : public P { 

   int x;

};

  

int main(void)

{

    Q q;

    return 0;

}

Вывод: ошибка компилятора
Мы получаем ошибку, потому что мы не можем создавать объекты абстрактных классов. P — абстрактный класс, поскольку он имеет чисто виртуальный метод. Класс Q также становится абстрактным, потому что он является производным от P и не реализует show ().

Пожалуйста, пишите комментарии, если вы найдете какие-либо неправильные ответы / объяснения, или вы хотите поделиться дополнительной информацией по темам, обсужденным выше.

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

Вывод программы C ++ | Комплект 8

0.00 (0%) 0 votes