C++实现:三维坐标类有数据成员x、y、z,对象间运算时要求通过函数成员实现“+”、前置“--”、“= =”运算符的重载,通过友元函数实现后置“--”、“+=”、“>>”和“<<”运算符的重载,实现三维坐标类对象间的直接运算。main()完成对象的定义和有关运算符重载函数的测试。
时间: 2025-01-04 17:41:43 浏览: 26
在C++中,你可以创建一个名为`Vector3D`的类,用于表示三维坐标,然后通过`friend`关键字定义友元函数来实现自定义运算符的重载。以下是这个类的基本结构:
```cpp
class Vector3D {
private:
float x, y, z;
public:
// 构造函数
Vector3D(float x = 0, float y = 0, float z = 0)
: x(x), y(y), z(z) {}
// 数据成员访问
float getX() const { return x; }
float getY() const { return y; }
float getZ() const { return z; }
// 自加和赋值操作符重载
Vector3D& operator+=(const Vector3D& other) {
x += other.x;
y += other.y;
z += other.z;
return *this;
}
friend Vector3D operator+(const Vector3D& a, const Vector3D& b);
// 前置减法操作符重载
Vector3D operator--(int) {
Vector3D temp(*this);
--x, --y, --z;
return temp;
}
// 相等比较操作符重载
bool operator==(const Vector3D& other) const {
return x == other.x && y == other.y && z == other.z;
}
// 友元函数实现后置减法、输入输出流重载
friend std::ostream& operator<<(std::ostream& os, const Vector3D& vec);
friend std::istream& operator>>(std::istream& is, Vector3D& vec);
// 其他友元函数定义...
};
// 实现自加操作符
Vector3D operator+(const Vector3D& a, const Vector3D& b) {
return Vector3D(a.x + b.x, a.y + b.y, a.z + b.z);
}
// 输入输出流重载示例(这里只提供部分模板)
std::ostream& operator<<(std::ostream& os, const Vector3D& vec) {
return os << "Vector3D(" << vec.getX() << ", " << vec.getY() << ", " << vec.getZ() << ")";
}
std::istream& operator>>(std::istream& is, Vector3D& vec) {
is >> vec.x >> vec.y >> vec.z;
return is;
}
// 主函数测试
int main() {
Vector3D v1(1, 2, 3);
Vector3D v2(4, 5, 6);
// 运算符测试
v1 += v2;
std::cout << "v1 after addition: " << v1 << "\n";
if (v1 == v2) {
std::cout << "v1 equals v2: " << std::boolalpha << true << "\n";
} else {
std::cout << "v1 does not equal v2\n";
}
return 0;
}
```
在这个例子中,我们实现了`+`, `+=`, `==`, `--`, `<<`, 和 `>>` 这些运算符的重载,并在`main()`函数中进行了简单的测试。请注意,这只是一个基础示例,实际应用中可能需要更复杂的错误处理和其他功能。
阅读全文