如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态(编译时多态),就是说地址是早绑定的。
当编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。
注意:虚继承只能解决具备公共祖先的多继承所带来的二义性问题,不能解决没有公共祖先的多继承的,工程开发中真正意义上的多继承是几乎不被使用,因为多重继承带来的代码复杂性远多于其带来的便利,多重继承对代码维护性上的影响是灾难性的,在设计方法上,任何多继承都可以用单继承代替。
1、有继承。2、子类重写父类虚函数函数a) 返回值,函数名字,函数参数,必须和父类完全一致(析构函数除外)b) 子类中virtual关键字可写可不写,建议写
纯虚析构函数在C++中是合法的,但是在使用的时候有一个额外的限制:必须为纯虚析构函数提供一个函数体。