函数重载和重写区别,请详细说明并举例
时间: 2024-03-27 18:40:12 浏览: 87
函数重载(Overloading)和函数重写(Override)是面向对象编程中的两个重要概念。
函数重载指的是在同一类中定义多个同名函数,但这些函数的参数类型、个数或顺序不同。编译器会根据调用时传入的参数类型、个数或顺序来确定调用哪个函数。例如:
```c++
class MyClass {
public:
void print(int x) {
cout << "int: " << x << endl;
}
void print(double x) {
cout << "double: " << x << endl;
}
};
MyClass obj;
obj.print(10); // 调用 void print(int x)
obj.print(3.14); // 调用 void print(double x)
```
函数重写指的是子类重新定义了父类中已有的函数,函数名、返回类型、参数列表都必须相同,但函数体可以不同。当子类对象调用该函数时,会优先调用子类中定义的函数,而不是父类中的函数。例如:
```c++
class Animal {
public:
virtual void speak() {
cout << "Animal speak!" << endl;
}
};
class Dog : public Animal {
public:
void speak() {
cout << "Dog bark!" << endl;
}
};
Animal* animal = new Dog();
animal->speak(); // 调用 Dog 的 speak() 函数
```
总结:
函数重载:在同一类中定义多个同名函数,参数类型、个数或顺序不同,编译器根据调用时传入的参数确定调用哪个函数。
函数重写:子类重新定义了父类中已有的函数,函数名、返回类型、参数列表必须相同,函数体可以不同,子类对象调用该函数时,优先调用子类中定义的函数。
阅读全文