Почему адреса указателей отличаются после апкастинга в C++?

class A
{
public:
    A():m_a(111) {}
    A(int a);
public:
    void display();
protected:
    int m_a;
};
A::A(int a): m_a(a) { }
void A::display()
{
    cout<<"Class A: m_a="<<m_a<<endl;
}

class B: public A
{
public:
    B(int a, int b);
public:
    void display();
protected:
    int m_b;
};
B::B(int a, int b): A(a), m_b(b) { }
void B::display()
{
    cout<<"Class B: m_a="<<m_a<<", m_b="<<m_b<<endl;
}

class C
{
public:
    C(int c);
public:
    void display();
protected:
    int m_c;
};
C::C(int c): m_c(c) { }
void C::display()
{
    cout<<"Class C: m_c="<<m_c<<endl;
}

class D: public B, public C
{
public:
    int temp;
    D():B(1,2),C(3),m_d(4)
    {}
    D(int a, int b, int c, int d);
public:
    void display();
private:
    int m_d;
};
D::D(int a, int b, int c, int d): B(a, b), C(c), m_d(d)
{
    temp = 0;
}
void D::display()
{
    cout<<"Class D: m_a="<<m_a<<", m_b="<<m_b<<", m_c="<<m_c<<", m_d="<<m_d<<endl;
}


A *pa = new A(1);
B *pb = new B(2, 20);
C *pc = new C(3);
D *pd = new D(4, 40, 400, 4000);
pa = pd;
pa -> display();
pb = pd;
pb -> display();
pc = pd;
pc -> display();
cout<<"-----------------------"<<endl;
cout<<"pa="<<pa<<endl;
cout<<"pb="<<pb<<endl;
cout<<"pc="<<pc<<endl;
cout<<"pd="<<pd<<endl;

Я разработал четыре класса. A,B и C являются основными классами, унаследованными D. B является подклассом A. Я просто хочу протестировать апкастинг в C++, поэтому я назначил значение указателя pd для pa b pb и pc. Как видите, я печатаю адреса четырех указателей. Само собой разумеется, что адреса всех указателей одинаковы. Однако pa, pb и pd одинаковы, а pc нет. Почему это?

0 ответов

Другие вопросы по тегам