用c++实现设计一个向量类,包含三个分量、长度等私有成员变量。为这个类重载加法、减法、乘法和除法四个运算符,使得对两个向量进行运算时可以直接使用运算符进行操作。要求:运算符重载函数必须以成员函数或友元函数的形式实现,同时需要考虑向量的加减乘除规则。
时间: 2023-06-25 16:03:17 浏览: 90
好的,下面是向量类的实现代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Vector {
private:
double x, y, z;
double length;
public:
Vector(double a = 0, double b = 0, double c = 0) : x(a), y(b), z(c) {
length = sqrt(x * x + y * y + z * z);
}
// 重载运算符+,使用友元函数实现
friend Vector operator+(const Vector& v1, const Vector& v2) {
double a = v1.x + v2.x;
double b = v1.y + v2.y;
double c = v1.z + v2.z;
return Vector(a, b, c);
}
// 重载运算符-,使用友元函数实现
friend Vector operator-(const Vector& v1, const Vector& v2) {
double a = v1.x - v2.x;
double b = v1.y - v2.y;
double c = v1.z - v2.z;
return Vector(a, b, c);
}
// 重载运算符*,使用友元函数实现
friend Vector operator*(const Vector& v1, const Vector& v2) {
double a = v1.y * v2.z - v1.z * v2.y;
double b = v1.z * v2.x - v1.x * v2.z;
double c = v1.x * v2.y - v1.y * v2.x;
return Vector(a, b, c);
}
// 重载运算符/,使用友元函数实现
friend Vector operator/(const Vector& v1, const Vector& v2) {
if (v2.x == 0 || v2.y == 0 || v2.z == 0) {
throw "Divided by zero";
}
double a = v1.x / v2.x;
double b = v1.y / v2.y;
double c = v1.z / v2.z;
return Vector(a, b, c);
}
// 输出向量信息
void print() {
cout << "(" << x << ", " << y << ", " << z << "), length=" << length << endl;
}
};
int main() {
Vector v1(1, 2, 3), v2(4, 5, 6);
Vector v3 = v1 + v2;
Vector v4 = v1 - v2;
Vector v5 = v1 * v2;
Vector v6 = v1 / v2;
v3.print();
v4.print();
v5.print();
v6.print();
return 0;
}
```
在上面的代码中,我们定义了一个向量类`Vector`,包含三个私有成员变量`x`、`y`、`z`表示向量的三个分量,以及一个私有成员变量`length`表示向量的长度。在构造函数中,我们根据三个分量计算向量的长度。
然后,我们重载了加法运算符`+`、减法运算符`-`、乘法运算符`*`、除法运算符`/`,使用友元函数的形式实现。在重载运算符的实现中,我们遵循了向量的加减乘除规则。
最后,我们在`main`函数中创建了两个向量`v1`、`v2`,并对它们进行加减乘除运算,然后输出结果。
阅读全文