Iysdx 2023-02-24 15:18 采纳率: 0%
浏览 18

将派生类指针赋值给基类指针

请问为什么运行之后pc的值跟pa,pb,pd不一样?

#include <iostream>
using namespace std;

//基类A
class A {
public:
    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;

}

//中间派生类B
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;

}

//基类C
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;

}

//最终派生类D
class D : public B, public C {
public:
    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) { }
void D::display() {
    cout << "Class D: m_a=" << m_a << ", m_b=" << m_b << ", m_c=" << m_c << ", m_d=" << m_d << endl;

}

int main() {
    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;
    return 0;
}


img

  • 写回答

2条回答 默认 最新

  • sleep_i_like 2023-02-24 15:33
    关注

    这是因为派生类D继承了基类A和C,而pa,pb,pd指向的是派生类D,而pc指向的是基类C,所以它们的值不一样。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月24日

悬赏问题

  • ¥15 付费求做一个自助抢单插件
  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题