#include <iostream> // 引入输入输出流库
using namespace std; // 使用标准命名空间,以避免在每次调用标准库时都写std::
// 定义一个名为complex的类,用于表示复数
class complex
{
public:
// 默认构造函数,创建一个复数,其实部和虚部都为0
complex()
{
real = imag = 0;
}
// 带参数的构造函数,根据给定的实部和虚部创建一个复数
complex(double r, double i)
{
real = r;
imag = i;
}
// 重载+操作符,用于两个复数的加法
complex operator +(const complex &c);
// 重载-操作符,用于两个复数的减法
complex operator -(const complex &c);
// 重载*操作符,用于两个复数的乘法
complex operator *(const complex &c);
// 重载/操作符,用于两个复数的除法(注意:这里仅提供了基本的除法实现,没有考虑分母为0的情况)
complex operator /(const complex &c);
// 声明一个友元函数print,用于打印复数
friend void print(const complex &c);
private:
// 私有成员变量,用于存储复数的实部和虚部
double real, imag;
};
// 实现+操作符的重载
inline complex complex::operator +(const complex &c)
{
// 创建一个新的复数对象,其实部和虚部为两个复数相加的结果
return complex(real + c.real, imag + c.imag);
}
// 实现-操作符的重载
inline complex complex::operator -(const complex &c)
{
// 创建一个新的复数对象,其实部和虚部为两个复数相减的结果
return complex(real - c.real, imag - c.imag);
}
// 实现*操作符的重载
inline complex complex::operator *(const complex &c)
{
// 根据复数乘法的规则创建一个新的复数对象
return complex(real * c.real - imag * c.imag, real * c.imag + imag * c.real);
}
// 实现/操作符的重载
inline complex complex::operator /(const complex &c)
{
// 根据复数除法的规则创建一个新的复数对象
// 注意:这里假设分母不为0,并且没有处理分母为0的情况
double denominator = c.real * c.real + c.imag * c.imag;
return complex((real * c.real + imag * c.imag) / denominator, (imag * c.real - real * c.imag) / denominator);
}
// 友元函数print的实现,用于打印复数
void print(const complex &c)
{
// 如果虚部小于0,则直接打印实部和虚部(不带+号)
if (c.imag < 0)
cout << c.real << c.imag << "i";
else
// 如果虚部大于等于0,则打印实部、+号和虚部
cout << c.real << "+" << c.imag << "i";
}
int main()
{
// 创建两个复数对象c1和c2,并初始化它们的实部和虚部
complex c1(2.0, 3.0), c2(4.0, -2.0), c3;
// 使用+操作符将c1和c2相加,并将结果存储在c3中
c3 = c1 + c2;
// 调用print函数打印c3的值
print(c3);
return 0; // 主函数返回0,表示程序正常结束
}
C++类练习(16)
于 2024-06-19 14:58:02 首次发布