函数重载
函数重载允许在C++中使用相同的函数名字但是拥有不同参数列表的多个函数。这些函数可以有不同数量或类型的参数。当你调用一个重载函数时,编译器会根据提供的参数数量和类型来确定调用哪个版本的函数。
-
double calculateArea(double radius) 用于计算圆的面积; double
-
calculateArea(double width, double height) 用于计算矩形的面积; double
-
calculateArea(double side1, double side2, double side3) 用于计算三角形的面积。
重写(Overriding)是指派生类重新定义了基类中已经存在的虚函数的行为。通过重写,派生类可以根据自身的需求提供特定的实现,而不是简单地继承基类中的实现。
函数重写
在C++中,要进行函数重写,需要满足以下条件:
- 基类中的函数必须声明为虚函数。
- 派生类中的函数必须使用相同的函数名、参数列表和返回类型。
- 派生类中的函数必须声明为虚函数,尽管不是必需的,但是最好使用
override
关键字进行显式标记,以确保它是对基类虚函数的重写。
以下是一个简单的示例:
cpp
#include <iostream>
// 基类 Animal
class Animal {
public:
virtual void speak() {
std::cout << "Animal speaks" << std::endl;
}
};
// 派生类 Dog 重写了基类中的 speak() 函数
class Dog : public Animal {
public:
void speak() override {
std::cout << "Dog barks" << std::endl;
}
};
// 派生类 Cat 重写了基类中的 speak() 函数
class Cat : public Animal {
public:
void speak() override {
std::cout << "Cat meows" << std::endl;
}
};
int main() {
Animal animal;
Dog dog;
Cat cat;
animal.speak(); // 输出 "Animal speaks"
dog.speak(); // 输出 "Dog barks"
cat.speak(); // 输出 "Cat meows"
return 0;
}
在这个示例中,Dog
类和 Cat
类都重写了 Animal
类中的 speak()
函数。当通过基类指针或引用调用 speak()
函数时,根据对象的实际类型会调用相应的重写版本,实现了多态性。