📜  C++程序的输出| 8套

📅  最后修改于: 2022-05-13 01:56:11.195000             🧑  作者: Mango

C++程序的输出| 8套

预测以下 C++ 程序的输出。

问题 1

#include
using namespace std;
  
class Test1
{
    int x;
public:
    void show() {  }
};
  
class Test2
{
    int x;
public:
    virtual void show() {  }
};
  
int main(void)
{
    cout<

输出:
4
8
Test1 和 Test2 之间只有一个区别。 show() 在 Test1 中是非虚拟的,但在 Test2 中是虚拟的。当我们将函数设为虚拟时,编译器会添加一个额外的指针 vptr 指向该类的对象。编译器这样做是为了实现运行时的多态性(有关更多详细信息,请参阅 Thinking in C++ book 的第 15 章)。额外的指针 vptr 增加了对象的大小,这就是为什么我们得到 8 作为 Test2 的大小。


问题2

#include
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()。