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

通常,除可以进行显式强制转换的数据类型,C++不允许一种类型的指针指向另一种类型的对象,也不允许一种类型的引用引用另一种类型的对象。但对于继承的类型,允许派生类向基类的向上转换(upcasting),但不允许基类向派生类的向下转换(downcasting),本文在学习C++ Primer Plus的时候,读了原文虽已经理解,但仍然没有太深刻,尤其向上向下经常要想一会儿,随有感而写。
摘要由CSDN通过智能技术生成

       通常,除可以进行显式强制转换的数据类型,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;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

drugvender

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

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

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

打赏作者

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

抵扣说明:

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

余额充值