函数分类
虚函数:被子类同名函数所覆盖,可分为纯虚函数和普通虚函数。
(1)纯虚函数:virtual void f()=0;
默认情况是只有定义,而无需实现,即只是定义一个接口,同时包含了纯虚函数的类表明该类时一个抽象类,不能定义该类的对象,也就是说该类被定义成基类,是要被继承的,通过继承类来完成基类对象的生成。不能实例化对象。
(2)一般虚函数:virtual void f(){ };
必须要有函数的实现。
虚函数的作用
实现“动态联编”,即在程序的运行阶段动态地选择合适的成员函数。
实现方式:在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型,以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
虚函数的代价
每个虚函数的对象都必须维护一个V表,使用虚函数时都会产生系统开销,若仅是很小的类且不想派生,没必要用。
虚指针
虚函数的实现细节,带有虚函数的类中每个对象都有一个虚指针指向该类的虚函数表。
来源:https://www.cnblogs.com/yujing611033/p/6011454.html