用 C++ 编程题(运算符重载)。设计一个复数类,要求对其构造函数进行重载,并重载运算符+号,以便用于计算两个复数类对象的相加,再写一个类型转换函数,将复数类对象转化为一个复数实部的数值,再参与简单数值计算。完整代码
时间: 2024-11-15 15:34:21 浏览: 53
在C++中,我们可以通过运算符重载来定制类的行为。首先,我们需要定义一个复数类`ComplexNumber`,包含实部和虚部,并实现构造函数及`+`运算符重载。同时,提供一个成员函数用于将复数转换为实数。以下是完整的代码示例:
```cpp
#include <iostream>
#include <complex> // C++标准库中的复数支持
class ComplexNumber {
private:
double real;
double imag;
public:
// 构造函数重载
ComplexNumber(double r = 0, double i = 0) : real(r), imag(i) {}
// 运算符+重载,用于复数相加
ComplexNumber operator+(const ComplexNumber& other) const {
return ComplexNumber(real + other.real, imag + other.imag);
}
// 类型转换函数,返回复数的实部
double toReal() const {
return real;
}
// 打印复数
void print() const {
std::cout << real << " + " << imag << "i" << std::endl;
}
friend std::ostream& operator<<(std::ostream& os, const ComplexNumber& cn) {
os << cn.toReal() << " + " << cn.imag << "i";
return os;
}
};
int main() {
ComplexNumber c1(2, 3); // 复数 2 + 3i
ComplexNumber c2(4, -5); // 复数 4 - 5i
ComplexNumber sum = c1 + c2; // 相加
std::cout << "Sum: " << sum << std::endl;
std::cout << "Real part of sum: " << sum.toReal() << std::endl;
std::cout << "c1 (as a real number): " << c1 << std::endl;
std::cout << "c2 (as a real number): " << c2 << std::endl;
return 0;
}
```
在这个例子中,我们定义了`+`运算符重载使得可以像操作普通数值一样对复数进行相加。`toReal()`函数用于将复数转换为实数,而`friend`关键字允许我们在`operator<<`中直接访问复数的`toReal()`方法。
阅读全文