给一个重载运算符的例子
时间: 2024-03-16 18:48:08 浏览: 15
好的,下面是一个重载加法运算符的例子:
```c++
class Vector {
public:
Vector(int x = 0, int y = 0) : m_x(x), m_y(y) {}
Vector operator+(const Vector& v) const {
return Vector(m_x + v.m_x, m_y + v.m_y);
}
int getX() const { return m_x; }
int getY() const { return m_y; }
private:
int m_x;
int m_y;
};
int main() {
Vector v1(1, 2);
Vector v2(3, 4);
Vector v3 = v1 + v2;
std::cout << v3.getX() << ", " << v3.getY() << std::endl; // 输出 "4, 6"
return 0;
}
```
在这个例子中,我们定义了一个二维向量类 Vector,重载了加法运算符 operator+()。重载函数返回一个新的 Vector 对象,其 x 和 y 分别为两个操作数的 x 和 y 之和。在 main 函数中,我们创建了两个 Vector 对象 v1 和 v2,然后使用重载的加法运算符将它们相加,得到了一个新的 Vector 对象 v3,最后输出了 v3 的 x 和 y 坐标。
相关问题
运算符重载的简单例子
好的,下面是一个简单的运算符重载的例子,我们将重载加法运算符(+):
```c++
#include <iostream>
using namespace std;
class Vector {
public:
int x, y;
Vector() {}
Vector(int a, int b) {
x = a;
y = b;
}
Vector operator+(const Vector& v) {
Vector temp;
temp.x = x + v.x;
temp.y = y + v.y;
return temp;
}
};
int main() {
Vector v1(2, 3);
Vector v2(4, 5);
Vector v3 = v1 + v2;
cout << "v3.x = " << v3.x << ", v3.y = " << v3.y << endl;
return 0;
}
```
在上面的代码中,我们定义了一个名为 Vector 的类,其中包含两个整数类型的成员变量 x 和 y。我们还定义了一个默认构造函数和一个带有两个参数的构造函数,用于初始化 x 和 y 的值。
然后,我们重载了加法运算符(+),并在其中执行向量加法操作。该运算符返回一个 Vector 类型的对象,该对象包含两个向量的和。
在主函数中,我们创建了两个 Vector 类型的对象 v1 和 v2,并将它们相加,结果存储在 v3 中。最后,我们打印出 v3 的 x 和 y 值。
当我们运行程序时,输出应该为:
```
v3.x = 6, v3.y = 8
```
这是因为 v3 的 x 值等于 v1 和 v2 的 x 值之和,y 值也是如此。这就是运算符重载的基本使用方法。
c++重载运算符技巧
C++中的运算符重载是一种特殊的多态性,它允许我们重新定义已有的运算符,以便用于用户自定义的数据类型。以下是一些C++重载运算符的技巧:
1. 运算符重载函数必须是类的成员函数或全局函数,但不能是普通的成员函数。
2. 重载运算符函数的名称必须是operator后面跟着要重载的运算符符号,例如+、-、*、/等。
3. 重载运算符函数可以有任意数量的参数,但必须至少有一个参数是类类型或枚举类型。
4. 重载运算符函数可以返回任何类型的值,但通常返回一个新的类对象。
5. 重载运算符函数可以是const函数,这意味着它不会修改类的成员变量。
6. 重载运算符函数可以是友元函数,这意味着它可以访问类的私有成员变量。
以下是一个C++重载运算符的例子:
```cpp
#include <iostream>
using namespace std;
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
Complex operator+(const Complex& c) const {
return Complex(real + c.real, imag + c.imag);
}
friend ostream& operator<<(ostream& os, const Complex& c) {
os << c.real << "+" << c.imag << "i";
return os;
}
private:
double real;
double imag;
};
int main() {
Complex c1(1.0, 2.0);
Complex c2(3.0, 4.0);
Complex c3 = c1 + c2;
cout << c3 << endl; // 输出:4+6i
return 0;
}
```