多继承
class A {
int a;
virtual int foo() {return 1;}
};
class B {
int b;
virtual int f() {return 2;}
};
class C : public A, public B {
int c;
};
int main() {
C *c = new C();
A *a = static_cast<A*>(c);
B *b = static_cast<B*>(c);
cout << a << " " << b << " " << c << endl;
return 0;
}
输出是
0x22e38 0x22e40 0x22e38
即,对于多继承,向上转型后指针指向的其实就是对应的父类的部分;这部分的开头仍然是虚函数表,所以不影响。