面试题:重写和重载的区别
在 C++ 中,重写(override)和重载(overload)是两个不同的概念。
重写(override)
重写是指派生类中的函数重新定义了其基类中的虚函数。在派生类中使用与基类中被重写的函数具有相同名称、参数列表和返回类型的函数声明,来覆盖基类中的虚函数。这样,在使用指向派生类对象的基类指针或引用来调用该虚函数时,会调用被派生类重写的版本而非基类中的版本。
以下是一个简单的例子:
class Base {
public:
virtual void foo() {
std::cout << "Base::foo()" << std::endl;
}
};
class Derived : public Base {
public:
void foo() override {
std::cout << "Derived::foo()" << std::endl;
}
};
上面的代码中,Derived
类重写了 Base
类中的 foo
函数。
重载(overload)
重载是指在同一作用域中使用相同的函数名称,但是它们的参数数量、类型或顺序不同。例如,可以重载一个返回类型为 int
的函数 add
,使它能够接受任意数量和类型的参数,并执行加法操作。
以下是一个简单的例子:
int add(int x, int y) {
return x + y;
}
double add(double x, double y) {
return x + y;
}
long add(long x, long y, long z) {
return x + y + z;
}
上面的代码中,add
函数被重载了三次,分别用于 int
类型、double
类型和 long
类型的加法操作。
总结
重写和重载都是 C++ 语言中的重要概念。重写是指派生类重新定义了其基类中的虚函数,而重载是指在同一作用域中使用相同的函数名称但参数不同的多个函数。这两个概念必须区分开,正确地使用它们有助于编写更优雅和易于维护的代码。