static_cast между «несвязанными типами» - PullRequest
1 голос
/ 08 декабря 2011

Если у меня есть такая структура класса:

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();

А и В не связаны, не так ли?

1 Ответ

5 голосов
/ 08 декабря 2011

Они могут быть не связаны, но компилятор здесь не выполняет диагностику между преобразованиями.

Он просто говорит: «О, C - это производный класс A, насколько я могу судить».
В следующей строке написано: «О, B - это базовый класс C, насколько я могу судить».
И это все. В вашем случае C связывает A и B между приведениями.

...