在C++中,重载(Overloading)和重写(Overriding)是两个不同的概念,它们涉及到函数或方法的使用和定义。下面分别介绍它们:
重载(Overloading)
重载是指在同一作用域内,允许有多个同名函数,这些函数的参数列表不同(参数的个数或类型不同)。编译器会根据调用时传递的参数来选择正确的函数版本。重载适用于普通函数和类成员函数。
示例:
#include <iostream>
void display(int num) {
std::cout << "Displaying an integer: " << num << std::endl;
}
void display(double num) {
std::cout << "Displaying a double: " << num << std::endl;
}
int main() {
int intValue = 42;
double doubleValue = 42.5;
display(intValue); // 调用 display(int)
display(doubleValue); // 调用 display(double)
return 0;
}
重写(Overriding)
重写是指派生类中重新定义基类中的虚函数(virtual function),以实现多态(Polymorphism)。派生类中的函数签名必须与基类中的虚函数完全相同(返回类型、函数名和参数列表)。当通过基类指针或引用调用该函数时,将根据对象的实际类型动态地调用相应的版本。
示例:
#include <iostream>
class Base {
public:
virtual void display() {
std::cout << "Displaying base class." << std::endl;
}
};
class Derived : public Base {
public:
// 重写基类的虚函数
void display() override {
std::cout << "Displaying derived class." << std::endl;
}
};
int main() {
Base* basePtr = new Base();
Base* derivedPtr = new Derived();
basePtr->display(); // 调用 Base::display()
derivedPtr->display(); // 调用 Derived::display()
delete basePtr;
delete derivedPtr;
return 0;
}
总结一下:
- 重载是在同一作用域内定义多个同名函数,但参数列表不同。
- 重写是派生类重新定义基类中的虚函数,实现多态。