虚函数和纯虚函数的区别

(1)

虚函数为了重载和多态的需要,在基类中是已经实现了的,即便是个空实现,所以子类中可以重写也可以不写基类中的此函数!

纯虚函数在基类中是没有实现的,必须在子类中加以实现,很像java中的接口函数!

(2)

虚函数是为了继承接口和默认行为

 

纯虚函数只是继承接口,行为必须重新定义

(3)

在很多情况下,基类本身直接生成对象是不合情理的,带纯虚函数的类叫抽象类,这种基类不能直接生成对象。抽象类派生的类的纯虚函数如果没有被改写,那么它的派生类还是个抽象类。

(4)

只有成员函数才可以是虚拟的,友元不是成员函数,因此友元不支持虚拟函数。但可以通过让友元函数调用虚拟成员函数来解决友元的虚拟问题。

在有动态分配堆上内存的时候,析构函数若不为虚,对父类的指针调用delete时,释放不了子类中特有的部分,会内存泄露,所以析构函数必须是虚函数,但没有必要是纯虚的,析构函数应当是虚函数,将调用相应对象类型的析构函数,因此,如果指针指向的是子类对象,将调用子类的析构函数,然后自动调用基类的析构函数。

 

原文地址:https://www.cnblogs.com/encode/p/3664668.html