我电脑运行结果是4,4,4,8,4,按这个看,基类的虚函数指针似乎不会在派生类中复制?
#include
#include
#include
#include
using namespace std;
class A {
public:
virtual int fun() {return 1;}
};
class E : public A {
public:
virtual int fun() {return 5;}
};
class B : virtual public A {
public:
virtual int fun() {return 2;}
};
class C : virtual public A {
public:
virtual int fun() {return 3;}
};
class D : public B, public C {
public:
virtual int fun() {return 4;}
};
int main()
{
cout << sizeof(A) << endl; // 4
cout << sizeof(B) << endl; // 4
cout << sizeof(C) << endl; // 4
cout << sizeof(D) << endl; // 8
cout << sizeof(E) << endl; // 4
return 0;
}
是覆盖不是复制
这个牵涉到虚基类,虚函数。
虚基类:
虚基类的特点是,虚基类的函数会比非虚基类的函数先调用,s所以B C是没有问题的。
虚函数:
特点是虚函数遇到同名的时候,回先访问虚函数然后访问同名函数,也就是分别。所以D.E没问题。
覆盖了