我在思考C++中的多态机制,但有一件事我无法理解。这里有一段非常简单的代码,只有一个类:
#include <iostream>
using namespace std;
class A
{
public:
int x;
void fun1();
double fun2(int, char*);
void fun3(double, float[]);
};
int main()
{
cout << sizeof(A) << endl;
return 0;
}
在控制台上会打印出 int 对象(x)的大小 - 这是很明显的。如果我通过添加关键字 virtual 修改我的类,大小将发生变化,因为编译器会添加指向虚函数数组(vtable)的指针。但当我声明完全不同签名的新虚拟方法时,我的类的大小为什么不会改变呢? 我的意思是:
void (*(tab[100]) )(int, double, char*);
这是一个数组的定义,该数组必须包含带有特定签名的函数地址:
void fun(int, double, char*);
只有这种类型的函数才能添加到该数组中,因此无论虚方法类的类型如何,都仅包含一个指向一个虚数组的指针。在我的逻辑中哪里犯了错误?