1、一般的同名函数
c++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此,在子类重新声明该虚函数时,可以加,也可以不加,但习惯上每一层声明函数时都加virtual,使程序更加清晰。
2、析构函数(自然并非同名)
如果存在继承,那么父类的析构函数,一定要定义为virtual虚函数。只有这样,在delete 父类指针的时候,才会利用虚函数的多态特性,逐级调用子类的析构函数,进而释放子类中申请的“堆内存”!!
如果存在“多层/多级”继承(A->B->C),每一层级的父类,析构函数都要定义为virtual虚函数。