在C++中,函数重写(Function Overriding)是面向对象编程中的一个重要概念,主要用于实现多态。当一个类(我们称之为子类或派生类)继承自另一个类(称为基类或父类)时,子类可以定义一个与基类中具有相同名称、相同返回类型及相同参数列表的函数。这种在派生类中定义的函数“覆盖”了基类中的同名函数。
函数重写的主要目的是让派生类能够改变或扩展继承自基类的行为。在运行时,这允许对象通过基类的指针或引用调用派生类中的函数,这是多态行为的基础。
示例:
假设我们有一个基类 Animal
和一个派生类 Dog
,如下所示:
cppclass Animal { public: virtual void speak() { cout << "Some animal sound" << endl; } }; class Dog : public Animal { public: void speak() override { // 这里使用了override关键字来明确指明重写 cout << "Woof" << endl; } };
在这个例子中,Dog
类重写了 Animal
类中的 speak
方法。当通过 Animal
类型的指针或引用调用 speak
方法时,如果指向的是 Dog
类的对象,那么调用的将是 Dog
类中的 speak
方法:
cppAnimal* myPet = new Dog(); myPet->speak(); // 输出 "Woof"
这里,虽然 myPet
是 Animal
类型的指针,但它实际指向 Dog
的对象,因此调用的是 Dog
中重写的 speak
函数,这正是多态的体现。
使用 override
关键字是C++11引入的一种良好实践,它可以让编译器帮助检查函数是否正确地重写了基类中的函数。如果没有正确重写(例如参数类型不匹配),编译器将报错。这有助于避免因拼写错误或不匹配的函数签名而导致的错误。
2024年7月16日 14:15 回复