在本文中,您将学习函数重写。此外,您还将学习如何在C ++编程中评估基类的函数重写。继承允许软件开发人员从现有类派生新类。派生类继承基类(现有类)的功能。假设基类和派生类都具有一个具有相同名称和参数(参数的数量和类型)的成员函数。如果创建派生类的对象并调用在两个类(基类和派生类)中都存在的成员函数,则将调用派生类的成员函数,而忽略基类的函数。C ++中的此功能称为函数重写。

如何从派生类访问基类中的重写函数?
要从派生类访问基类的重写函数,请使用范围解析运算符::。例如,如果要访问基类的getData()函数,则可以在派生类中使用以下语句。
Base::getData();

函数重写(Function Overriding)是面向对象编程中的一个概念,指的是在子类中定义一个与父类中同名的函数,以覆盖(重写)父类中的函数实现。
函数重写常用于实现多态性(Polymorphism),即同一个函数名可以在不同的类中具有不同的行为。通过函数重写,子类可以改变继承自父类的函数的行为,以满足子类特定的需求。
函数重写的要点包括:
以下是一个简单的示例,展示了函数重写的使用:
- #include
-
- class Animal {
- public:
- virtual void makeSound() {
- std::cout << "The animal makes a sound." << std::endl;
- }
- };
-
- class Cat : public Animal {
- public:
- void makeSound() override {
- std::cout << "The cat meows." << std::endl;
- }
- };
-
- class Dog : public Animal {
- public:
- void makeSound() override {
- std::cout << "The dog barks." << std::endl;
- }
- };
-
- int main() {
- Animal animal;
- Cat cat;
- Dog dog;
-
- animal.makeSound(); // 输出:"The animal makes a sound."
- cat.makeSound(); // 输出:"The cat meows."
- dog.makeSound(); // 输出:"The dog barks."
-
- Animal* ptr = &cat;
- ptr->makeSound(); // 输出:"The cat meows."
-
- ptr = &dog;
- ptr->makeSound(); // 输出:"The dog barks."
-
- return 0;
- }
在上述示例中,我们定义了一个名为 Animal 的基类,以及两个派生类 Cat 和 Dog。基类中有一个名为 makeSound() 的函数,用于输出动物的叫声。
子类 Cat 和 Dog 分别重写了 makeSound() 函数,并提供了自己的实现。
在 main() 函数中,我们创建了 Animal、Cat 和 Dog 类的对象,并分别调用它们的 makeSound() 函数。根据对象的类型,输出的叫声会有所不同。
此外,我们还使用基类指针指向派生类对象,并通过指针调用 makeSound() 函数。我们创建了一个指向 cat 对象的基类指针 ptr,并通过它调用了 makeSound() 函数,此时也会动态绑定到 Cat::makeSound() 函数,输出 "The cat meows."。同样,当我们将 ptr 指向 dog 对象时,也会动态绑定到 Dog::makeSound() 函数,输出 "The dog barks."。