在C++中,方法覆盖(Overriding)是指子类提供特定于其自身实现的过程,以覆盖基类中具有相同名称、相同参数列表和相同返回类型的方法。方法覆盖允许子类根据其特定需求来修改或扩展基类的行为。
要实现方法覆盖,子类需要遵循以下规则:
-
返回类型:子类方法的返回类型必须与基类方法的返回类型相同,或者为基类返回类型的派生类(协变返回类型)。
-
函数名:子类方法与基类方法的名称必须完全相同。
-
参数列表:子类方法的参数列表必须与基类方法的参数列表完全相同,包括参数的个数、类型和顺序。
-
访问权限:子类方法的访问权限不能低于基类方法的访问权限。例如,如果基类方法是
public
的,那么子类方法也必须是public
的。
下面是一个简单的示例,展示了如何在C++中实现方法覆盖:
#includeclass Base { public: virtual void print() { std::cout << "Base class print method" << std::endl; } }; class Derived : public Base { public: void print() override { // 使用override关键字明确表示覆盖 std::cout << "Derived class print method" << std::endl; } }; int main() { Base* basePtr = new Derived(); // 多态:基类指针指向子类对象 basePtr->print(); // 输出:Derived class print method delete basePtr; return 0; }
在这个示例中,Derived
类覆盖了Base
类的print
方法。通过使用override
关键字,我们可以明确表示子类方法覆盖了基类方法。此外,我们还展示了多态的概念,即基类指针可以指向子类对象,并通过基类指针调用子类方法的覆盖版本。