c++虚重载运算符
时间: 2023-07-05 11:10:38 浏览: 117
在C++中,可以使用虚重载运算符来实现多态性。虚重载运算符是指在基类中定义的虚函数,在派生类中可以被重载的运算符。例如,可以在基类中定义一个虚函数operator+,然后在派生类中重载这个运算符。
以下是一个示例代码,其中基类为Shape,派生类为Rectangle和Circle,它们都重载了运算符+:
```
#include <iostream>
using namespace std;
class Shape {
public:
virtual double operator+(Shape& other) {
return 0;
}
};
class Rectangle : public Shape {
public:
double width, height;
Rectangle(double w, double h) : width(w), height(h) {}
virtual double operator+(Shape& other) {
Rectangle& r = dynamic_cast<Rectangle&>(other);
return width * height + r.width * r.height;
}
};
class Circle : public Shape {
public:
double radius;
Circle(double r) : radius(r) {}
virtual double operator+(Shape& other) {
Circle& c = dynamic_cast<Circle&>(other);
return 3.14 * radius * radius + 3.14 * c.radius * c.radius;
}
};
int main() {
Rectangle r(3, 4);
Circle c(5);
Shape* s1 = &r;
Shape* s2 = &c;
cout << (*s1 + *s2) << endl; // 输出 97.86(3*4+3.14*5*5)
return 0;
}
```
在上面的代码中,Shape类中定义了一个虚函数operator+,Rectangle和Circle类都重载了这个运算符,并且使用了dynamic_cast进行类型转换,以便访问派生类的成员变量。在main函数中,分别创建了一个Rectangle对象和一个Circle对象,并将它们转换为Shape指针,然后调用它们的运算符+,得到了正确的结果。
阅读全文