5.5基类和派生类的转换

本文探讨了C++中派生类与基类之间的赋值规则,包括派生类对象如何向基类对象赋值,派生类对象如何替代基类对象的引用,以及指向基类对象的指针如何指向派生类对象。文中详细解释了这些操作的可行性和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基类和派生类之间可以相互赋值吗?

先建造一个基类和一个派生类

class A
{
    public:
        int a;
};

class B : public A
{
    public:
        int b;
        void display()
        {
            cout << a << endl;
        } 
};

(1)派生类对象可以向基类对象赋值

比如可以这样

A a1;
B b1;
a1 = b1;

但是反过来就不可以了

只能用子对象对基类对象赋值,而不能用基类对象对其子对象赋值

因为显而易见,基类对象不包含派生类的成员,怎么赋值?

同理,同一基类的不同派生类对象之间也不能赋值

(2)派生类对象可以替代基类对象的引用进行赋值或初始化

这和上面的一样,就是把基类替换为基类的引用

A a1;
B b1;
A &r = a1;     //定义基类A对象的引用,并用a1对其初始化
r = b1;

(3)派生类对象地址可以赋给指向基类对象的指针变量,也就是说,指向基类对象的指针变量可以用来指向派生类对象

A a1;
B b1;
A *pt = &a1;    //定义一个指向A类对象的指针并指向a1
pt->display();  //调用a1.display()函数
pt = &b1;       //指针指向b1
pt->display();  //调用b1.display()函数

第一个display函数成功调用了A类定义的内容

第二个display函数也成功调用了B类定义的内容

这里说明通过指向基类对象的指针,只能访问派生类中的基类成员,而不能访问派生类增加的成员

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值