通常,除可以进行显式强制转换的数据类型,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;