基类与派生类的类型转换

可以将基类指针/引用绑定到派生类对象上。也就是可以把派生类对象当成基类对象使用(需要传基类对象的参数也可以传派生类对象),但不能将基类转换成派生类。

静态类型与动态类型

  • 静态类型:变量或表达式在编译时确定的类型,由声明决定。代码写下时,编译器就能知道其静态类型。
  • 动态类型:变量或表达式在运行时所表示的对象的实际类型。只有当程序运行时,才知道变量指向的具体对象是什么。

基类指针或引用可以指向派生类对象,此时,静态类型仍然是基类类型,动态类型则是运行时绑定的派生类类型。即该指针或引用只能访问基类的成员,其中非虚函数调用的是基类的版本,虚函数会动态绑定到派生类定义的版本。

对象赋值的特殊情况

如果是直接将派生类对象赋值给基类,仅保留基类部分,派生类的成员被丢弃。之后,该对象的动态类型就变成了基类。