函数重写要求基类函数声明为virtual,派生类函数签名一致、返回类型协变,并推荐使用override关键字;非virtual函数同名仅构成隐藏,不实现多态。
在C++中,函数重写(override)是指派生类中重新定义基类的虚函数,以实现运行时多态。关键在于:基类函数必须声明为 virtual,派生类函数需满足签名一致、返回类型协变,并显式使用 override 关键字(推荐,C++11起支持)。
只有被 virtual 修饰的成员函数才能被正确重写。非 virtual 函数即使名字相同,也只是隐藏(hiding),不构成多态。
例如:
class Base {重写函数必须与基类虚函数:
推荐加上 override 关键字,编译器会检查是否真正重写了虚函数,避免拼写错误或签名不匹配导致的静默失败。
class Derived : public Base {重写的真正意义在于:用基类指针或引用指向派生类对象时,调用的是派生类版本的函数——这就是运行时多态。
Base* ptr = new Derived();注意:基类析构函数也应声明为 virtual,否则 delete 基类指针时不会调用派生类析构函数,可能引发资源泄漏。
基本上就这些。写对 virtual 和 override,保证签名一致,再用基类引用来调用,多态就自然发生了。