虚函数和函数重载的区别
时间: 2024-06-13 17:08:01 浏览: 163
函数重载和虚函数是C++中的两个重要概念,它们都可以实现多态性,但它们之间有以下几个区别:
1.函数名和参数列表:函数重载要求函数名相同,但参数列表不同,而虚函数要求函数名和参数列表完全相同。
2.函数类型:函数重载可以是成员函数或非成员函数,而虚函数只能是成员函数。
3.编译时和运行时:函数重载是在编译时确定调用哪个函数,而虚函数是在运行时确定调用哪个函数。
4.作用范围:函数重载处理的是横向的重载,即同一作用域内的函数名相同但参数列表不同的函数;而虚函数处理的是纵向的同名函数,即基类和派生类中函数名、参数列表完全相同的函数。
5.重载的函数可以具有不同的函数类型,而虚函数必须具有相同的函数类型。
下面是一个简单的例子,演示了函数重载和虚函数的区别:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual int getArea() { return 0; }
int getPerimeter() { return 0; }
};
class Rectangle: public Shape {
public:
int getArea() { return width * height; }
int getPerimeter() { return 2 * (width + height); }
Rectangle(int w, int h) : width(w), height(h) {}
private:
int width, height;
};
int main() {
Shape *shape;
Rectangle rec(10,7);
shape = &rec;
// 调用虚函数
cout << "Area: " << shape->getArea() << endl;
// 调用重载函数
cout << "Perimeter: " << shape->getPerimeter() << endl;
return 0;
}
```
阅读全文