如果我有这个类结构:
class A
{
public:
int a;
void funcA(){a = 0;}
};
class B
{
public:
int b;
void funcB(){b = 0;}
};
class C: public A, public B
{
public:
int c;
void funcC(){c = 0;}
};
Run Code Online (Sandbox Code Playgroud)
为什么我可以执行此演员表?
A* pA = new A;
C* pC = static_cast<C*> (pA);
B* pB = static_cast<B*> (pC);
pB->funcB();
Run Code Online (Sandbox Code Playgroud)
A和B是无关的,不是吗?
它们可能不相关,但编译器不会在此处进行内部诊断.
它只是说"哦,C是一个衍生类A,就我而言是合法的".
在下一行中,它说"哦,B是我的基础类C,就我而言是合法的".
这就是它.在你的情况下,C链接A和B演员之间.