2

如果我有这个类结构:

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;}
};

为什么我可以表演这个演员表?

A* pA = new A;

C* pC = static_cast<C*> (pA);
B* pB = static_cast<B*> (pC);

pB->funcB();

A和B不相关,不是吗?

4

1 回答 1

6

它们可能不相关,但编译器不会在此处进行类型间诊断。

它只是说“哦,C是 的派生类A,就我而言这是合法的”。
在下一行中,它说“哦,B是 的基类C,就我而言这是合法的”。
就是这样。在您的情况下,C链接AB演员表之间。

于 2011-12-08T12:23:29.147 回答