C++中虚继承的一个问题,真心不懂啊,希望大侠们帮忙解答一下啊
#include <iostream>
using namespace std;
class a
{
public:
a(){}
//~a(){}
int my;
virtual void draw()
{
cout<<"a draw"<<endl;
}
};
class test_b :public virtual a
{
public:
//test_b(){}
//~test_b(){}
public:
virtual void draw2()
{
cout<<"b draw"<<endl;
//return 0;
}
};
class test_b_: public virtual a
{
public:
test_b_(){};
//~test_b_(){};
virtual void draw()
{
cout<<" draw"<<endl;
//return 0;
}
};
class c:public test_b,public test_b_
{
public:
c(){}
~c(){}
virtual void draw()
{
cout<<"draw"<<endl;
//return 0;
}
};
int main()
{
cout<<sizeof(a)<<endl;
cout<<sizeof(test_b)<<endl;
cout<<sizeof(test_b_)<<endl;
cout<<sizeof(c)<<endl;
system("pause");
return 0;
}
在这里如果我在test_b里面加构造和析构函数的话sizeof得到的值就是16如果不加就是12,test_b_和c这两个类也是,只要加构造和析构就比不加多四个字节,为什么?虚继承到底都改变了些什么啊?
[解决办法]
虚继承就是多了个类似虚函数表的东西
至于为什么加上构造函数和析构函数会改变对象大小
坐等楼下。。
[解决办法]
你得有一个函数指针指向虚函数!
[解决办法]
你可以尝试输出来看看 到底里面是些什么东西
[解决办法]
楼上说的对,是多了个虚基类的指针,这更构造函数和析构函数没有关心,sizeof只是求数据成员的大小
[解决办法]