【发布时间】:2021-10-17 20:56:50
【问题描述】:
class NoVirtual {
int a;
public:
void x() const {}
int i() const { return 1; }
};
class OneVirtual {
int a;
public:
virtual void x() const {}
int i() const { return 1; }
};
class TwoVirtuals {
int a;
public:
virtual void x() const {}
virtual int i() const { return 1; }
};
int main() {
cout << "int: " << sizeof(int) << endl;
cout << "NoVirtual: "
<< sizeof(NoVirtual) << endl;
cout << "void* : " << sizeof(void*) << endl;
cout << "OneVirtual: "
<< sizeof(OneVirtual) << endl;
cout << "TwoVirtuals: "
<< sizeof(TwoVirtuals) << endl;
return 0;
}
输出为:
非虚拟:4
无效*:8
OneVirtual:16
两个虚拟:16
问题是:
由于 OneVirtual 和 TwoVirtuals 类具有虚函数,类的大小应该是 sizeof(int) + sizeof(void*) 即 12 字节。但大小打印为 16 字节。
谁能解释一下原因?
【问题讨论】:
-
你知道添加的指针,所以this should enlighten you有点。然而,无论如何,这不是一个直接的答案。
标签: c++ polymorphism