设计一个复数类,包括模板,构造函数,为a+bi的格式输出,正确处理a或b为0的情况,包括负数的加减乘除运算
时间: 2024-06-15 09:04:32 浏览: 110
设计一个复数类可以包括以下几个要素:
1. 模板:使用模板可以实现复数类的通用性,使其能够处理不同类型的实数部分和虚数部分。
2. 构造函数:复数类的构造函数可以接受实数部分和虚数部分作为参数,并将其存储在类的成员变量中。
3. a+bi的格式输出:为了实现a+bi的格式输出,可以重载复数类的输出运算符<<,在其中按照a+bi的格式输出实数部分和虚数部分。
4. 处理a或b为0的情况:在构造函数中,可以添加判断语句,如果实数部分或虚数部分为0,则将其设置为0。
5. 负数的加减乘除运算:为了实现负数的加减乘除运算,可以重载复数类的加减乘除运算符+、-、*、/,在其中按照复数的运算规则进行计算。
下面是一个示例代码:
```cpp
#include <iostream>
template <typename T>
class Complex {
private:
T real;
T imag;
public:
Complex(T r = 0, T i = 0) : real(r), imag(i) {}
friend std::ostream& operator<<(std::ostream& os, const Complex<T>& c) {
if (c.imag >= 0)
os << c.real << "+" << c.imag << "i";
else
os << c.real << c.imag << "i";
return os;
}
Complex<T> operator+(const Complex<T>& c) const {
return Complex<T>(real + c.real, imag + c.imag);
}
Complex<T> operator-(const Complex<T>& c) const {
return Complex<T>(real - c.real, imag - c.imag);
}
Complex<T> operator*(const Complex<T>& c) const {
return Complex<T>(real * c.real - imag * c.imag, real * c.imag + imag * c.real);
}
Complex<T> operator/(const Complex<T>& c) const {
T denominator = c.real * c.real + c.imag * c.imag;
return Complex<T>((real * c.real + imag * c.imag) / denominator, (imag * c.real - real * c.imag) / denominator);
}
};
int main() {
Complex<int> a(1, 2);
Complex<int> b(3, -4);
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << "a + b = " << a + b << std::endl;
std::cout << "a - b = " << a - b << std::endl;
std::cout << "a * b = " << a * b << std::endl;
std::cout << "a / b = " << a / b << std::endl;
return 0;
}
```
阅读全文