类型转换与继承
基类与派生类的类型转换
可以将基类指针/引用绑定到派生类对象上。也就是可以把派生类对象当成基类对象使用(需要传基类对象的参数也可以传派生类对象),但不能将基类转换成派生类。
静态类型与动态类型
- 静态类型:变量或表达式在编译时确定的类型,由声明决定。代码写下时,编译器就能知道其静态类型。
- 动态类型:变量或表达式在运行时所表示的对象的实际类型。只有当程序运行时,才知道变量指向的具体对象是什么。
基类指针或引用可以指向派生类对象,此时,静态类型仍然是基类类型,动态类型则是运行时绑定的派生类类型。即该指针或引用只能访问基类的成员,其中非虚函数调用的是基类的版本,虚函数会动态绑定到派生类定义的版本。
对象赋值的特殊情况
如果是直接将派生类对象赋值给基类,仅保留基类部分,派生类的成员被丢弃。之后,该对象的动态类型就变成了基类。
评论