【C++】基类和派生类的类型兼容规则

类型兼容规则的常见情况:

(1)子类对象可以当作父类对象使用,也就是说子类对象可以无条件隐式类型转换为一个父类对象

(2)子类对象可以直接初始化或直接赋值给父类对象

(3)父类指针可以直接指向子类对象

(4)父类引用可以直接引用子类对象

// 基类 person, 派生类 man
// 子类对象赋值给父类对象
person *p = &mn1;		// 类型兼容的,所以没有警告没有错误,person*和man*是类型兼容的
p->speak();				// 编译器在解析这句时,他认为p的类型是person*,所以p指向的一定就是一个person对象。

(5) 父类对象不能赋值给子类对象,但强制类型转换可以,不过强制转换极其危险,一旦调用了父类没有的方法,就会发生段错误。

// 2. 父类对象不能赋值给子类对象
man *p = &pn1;		// 子类的指针,指向父类的对象,会怎么样?编译报错,因为编译器认为父类对象不能直接当做子类对象用

// 3. 父类强制转换为子类
man& rm = (man)pn1;		// 极其危险,严重不推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值