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 に答える