天天看点

关于C++多态特性

1 静态联编:函数重载。不允许仅返回值不同。

2 动态联编:虚函数。

3 基类的指针可以指向派生类,但不能传递,指向派生的派生。

4 对于成员函数的调用:对象实例变量,调用对象自身的版本。对象指针变量,区分是基类指针还是当前派生类指针,以及是否为虚函数。如果是基类指针,非虚函数,调用指针对象所属的版本;如果是虚函数,调用实际指向的对象所属的版本(因为虚函数是通过虚表实现的,虚表的内容是会被覆盖的)。派生类指针则调用派生类版本。

5 多继承时,走各自的路径。

6 构造中虚函数依赖编译器判断当前类型,可能在派生类实例的构建过程中调用基类的版本。

7 抽象类不能实例化,也不能作为返回类型和函数参数,但是可以定义抽象类的指针和引用

8 如果想明确调用特定类的版本,在语法允许的前提下,可以通过指定类名做限制而实现。

继续阅读