绑定例外

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

静态类型和动态类型

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

基类和子类的类型转换

静态类型是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&)

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-04-24
  • 2021-06-01
  • 2022-12-23
  • 2021-06-12
  • 2021-11-06
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-13
  • 2022-12-23
  • 2021-07-08
  • 2021-08-06
  • 2022-12-23
  • 2021-06-10
相关资源
相似解决方案