基类和子类的类型转换

绑定例外

一般指针和引用和要绑定的对象属于同种类型,但基类指针或引用的绑定是一个例外。

静态类型和动态类型

静态类型编译时就确定,动态类型是运行时查对象内存才知道。

静态类型是Quote&,动态类型是运行时调用函数才知道。

一致情况

如果形参不是引用或指针,那么静态类型和动态类型一致


类型转换

基类向派生类直接转是不行的

Quote base;
Bulk_quote *bulkP = &base;  //xxx
Bulk_quote &bulkRef = base; //xxx

间接也不行 

Bulk_quote bulk;
Quote *itemP = &bulk;

Bulk_quote *bulkP = itemP; //xxx 

解释:这两种写法直接检查静态类型,一看不合适就报错。dynamic_cast会运行时帮忙检查,而如果确定没问题可以在编译时用static_cast强制转。

如果函数不是虚函数,那么都会调用静态类型的版本,就是基类的

调用基类版本会忽略掉子类的自己多定义的部分。

Bulk_quote bulk;
Quote item(bulk);  //调用Quote::Quote(const Quote&)

item = bulk; //调用Quote::operator =(const Quote&)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值