C++指针及引用的向上及向下转换

本文介绍了C++中指针和引用的向上转换(upcasting)和向下转换(downcasting)。向上转换,即从派生类到基类,C++允许并且用于实现多态。而向下转换,即从基类到派生类,C++不支持,因为基类不具备派生类的特有方法。文章通过实例代码解释了这两种转换的原理和限制。

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

       通常,除可以进行显式强制转换的数据类型,C++不允许一种类型的指针指向另一种类型的对象,也不允许一种类型的引用引用另一种类型的对象。

double dData = 3.0;
int * pIntData = &dData;         //不允许将doubl类型对象的指针初始化int类型指针
int & rIntData = dData;          //不允许将doubl类型变量初始化int类型引用

       进行编译时会出现错误提示: 

       cannot convert from 'double *' to 'int *'

       cannot convert from 'double' to 'int &'

第2行试图将double类指针&dData赋值初始化int类指针pIntData;

第3行试图将double类对象dData赋值初始化int引用rIntData;

一、向上转换(upcasting)

        首先看以下例子,该程序声明了三个类,基类是Grandpa(爷爷类),派生Father类(父类),Father类派生Son类(孙类),其中爷爷类会走路Walk(),父类会骑自行车Bicycle(),孙类会开汽车Car(),基类爷爷类有两个私有成员分别是年龄int nAge和姓名string strName,同时也提供了获取年龄和姓名的公有方法int GetAge()和string GetName()。

//updowncasting.cpp -- CopyRight (c) DrugVender XuWeigang 13602554136
//This Software without restriction.
//The above copyright shall be included in all copies.

#include <iostream>
#include <string>

using std::cout;
using std::endl;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

drugvender

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值