利用虚函数实现多态的方式:动态绑定
Posted j-c-y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用虚函数实现多态的方式:动态绑定相关的知识,希望对你有一定的参考价值。
基类指针/引用调用虚成员函数时才会发生动态绑定,即只有在程序执行阶段才知道调用哪个版本的虚函数。此时调用对象为该指针/引用的动态类型对象。(静态类型就是定义时的类型,此处也就是基类的类型,一般静态和动态类型时相同的,只有在这种情况下两者可能不同。)
OOP(面向对象编程)的核心思想“多态性”的根本就在于上述过程。
派生类覆盖要点
派生类中的虚函数要覆盖基类虚函数时,形参必须严格匹配(不然就成了在派生类中定义一个重载函数)。按c++11标准,可以在想覆盖的派生类虚函数形参括号后加override
关键字,让编译器帮忙检查。
*规避动态绑定
可以使用作用域运算符(::)规避虚函数的动态绑定机制,这种情况通常是派生类虚函数要调用它覆盖的基类中的虚函数时。
*禁止继承和覆盖
加final
限定符可以禁止继承和覆盖
class A final{/* */}; // 类A无法被继承
如果一个类中的所有成员都是public
的,可以用struct
代替,两者的区别就在于成员的权限设置
struct B{
virtual void fun() final; //虚函数fun()无法被派生类覆盖
}
struct C:B{}
void fun(); //报错,无法覆盖
以上是关于利用虚函数实现多态的方式:动态绑定的主要内容,如果未能解决你的问题,请参考以下文章
C++ 多态 : 虚函数静态绑定动态绑定单/多继承下的虚函数表