在C++中,如果一个派生类(子类)从基类(父类)继承,并且两个类都有一个同名的成员函数,那么在访问这个同名函数时,派生类中的函数会覆盖基类中的函数。这种行为称为函数重写(Function Overriding)。
当你在派生类中使用基类的成员函数时,编译器会根据对象的实际类型来选择正确的函数。如果对象是基类的实例,那么将调用基类的函数;如果对象是派生类的实例,那么将调用派生类的函数。
下面是一个简单的例子:
#include <iostream>
class Base {
public:
void print() {
std::cout << "Base class function" << std::endl;
}
};
class Derived : public Base {
public:
void print() override { // 使用override关键字明确表示重写
std::cout << "Derived class function" << std::endl;
}
};
int main() {
Base *b = new Base();
Derived *d = new Derived();
b->print(); // 输出 "Base class function"
d->print(); // 输出 "Derived class function"
delete b;
delete d;
return 0;
}
在这个例子中,Derived
类重写了Base
类的print()
函数。当我们通过基类指针调用print()
函数时,输出的是基类的函数;而当我们通过派生类指针调用print()
函数时,输出的是派生类的函数。