前言
在本文中,您将学习函数重写。此外,您还将学习如何在C ++编程中评估基类的函数重写。继承允许软件开发人员从现有类派生新类。派生类继承基类(现有类)的功能。假设基类和派生类都具有一个具有相同名称和参数(参数的数量和类型)的成员函数。如果创建派生类的对象并调用在两个类(基类和派生类)中都存在的成员函数,则将调用派生类的成员函数,而忽略基类的函数。C ++中的此功能称为函数重写。
如何从派生类访问基类中的重写函数?
要从派生类访问基类的重写函数,请使用范围解析运算符::。例如,如果要访问基类的getData()函数,则可以在派生类中使用以下语句。
Base::getData();
开始
函数重写(Function Overriding)是面向对象编程中的一个概念,指的是在子类中定义一个与父类中同名的函数,以覆盖(重写)父类中的函数实现。
函数重写常用于实现多态性(Polymorphism),即同一个函数名可以在不同的类中具有不同的行为。通过函数重写,子类可以改变继承自父类的函数的行为,以满足子类特定的需求。
函数重写的要点包括:
- 父类和子类之间存在继承关系。
- 子类中需要重写父类中已有的函数,函数名、参数列表和返回类型必须与父类中的函数一致。
- 函数重写只能发生在非静态成员函数(非静态方法)之间。
- 子类的重写函数必须与父类中的函数具有相同的访问权限或更宽松的访问权限。
以下是一个简单的示例,展示了函数重写的使用:
#include <iostream>
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."。