重载加减乘除符号用于计算复数

      由于系统给定的+,-,*,/符号只能用来处理系统已经定义好的比如int,float类型的类,因此我们想同样用+,-,*,/符号来处理我们自己定义的类就需要在类中进行运算符的重载。

      重载运算符后我们便可以随心所欲的用运算符处理我们自己定义的类

   复数类的类定义为:

class Complex
{
public:
	Complex(double real=0, double imag=0);
	//重载+,-,*,/
	Complex& operator+(Complex& cox_num2);
	Complex& operator-(Complex& cox_num2);
	Complex& operator*(Complex& cox_num2);
	Complex& operator/(Complex& cox_num2);
	//输出复数类
	void display();
private:
	//实部
	double real;
	//虚部
	double imag;
};

   由于无论是加减乘除我们都要让我们重载的符号能满足类型于a+b+c这样的操作,所以要让a+b返回的值还能加c,所以我们在调用运算符后返回的值应该还是一个Complex类型的对象,因此加减乘除运算符返回的类型都为Complex&。

   加减乘除运算都是需要两个变量的运算,而我们只传入了一个参数,这是为什么呢,因为我们这是在类中定义的成员函数,所以在运算符左边的对象就是调用这个运算符的对象,比如我们运算两个Complex的对象p1和p2,我们重载运算符后运用p1+p2,此时在+号左边的p1就是调用operator+函数的对象,而在+号右边的便是传入operator+函数的参数。

   我们重载运算符的格式就是 函数类型  operator+运算符名称(参数1,参数2)

   1.重载 +

//重载 +
Complex& Complex::operator+(Complex& cox_num2)
{
	Complex cox_num3;
	cox_num3.real= real + cox_num2.real;
	cox_num3.imag = imag + cox_num2.imag;
	return cox_num3;
}

2.重载 -

//重载 -
Complex& Complex::operator-(Complex& cox_num2)
{
	Complex cox_num3;
	cox_num3.real = real - cox_num2.real;
	cox_num3.imag = imag - cox_num2.imag;
	return cox_num3;
}

3.重载 *

//重载 *
Complex& Complex::operator*(Complex& cox_num2)
{
	Complex cox_num3;
	cox_num3.real = real * cox_num2.real - imag * cox_num2.imag;
	cox_num3.imag = real * cox_num2.imag + cox_num2.real * imag;
	return cox_num3;
}

4.重载 /

//重载 /
Complex& Complex::operator/(Complex& cox_num2)
{
	Complex cox_num3;
	cox_num3.real = (real * cox_num2.real + imag * cox_num2.imag) / (cox_num2.real * cox_num2.real + cox_num2.imag * cox_num2.imag);
	cox_num3.imag=(cox_num2.real*imag-real*cox_num2.imag)/ (cox_num2.real * cox_num2.real + cox_num2.imag * cox_num2.imag);
	return cox_num3;
}

   重载好运算符后我们便可以在建立两个对象后正常使用了

比如:

    Complex num1(2, 4);
    Complex num2(3, 5);

    Complex num3=num1+num2;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用友元函数重载加减乘除运算符来实现分数类的运算。首先,我们需要定义一个表示分数的类,其中包含分子和分母两个成员变量。 ```cpp #include <iostream> class Fraction { public: Fraction(int numerator = 0, int denominator = 1) : num(numerator), den(denominator) {} // 声明友元函数 friend Fraction operator+(const Fraction& f1, const Fraction& f2); friend Fraction operator-(const Fraction& f1, const Fraction& f2); friend Fraction operator*(const Fraction& f1, const Fraction& f2); friend Fraction operator/(const Fraction& f1, const Fraction& f2); void print() const { std::cout << num << "/" << den << std::endl; } private: int num; // 分子 int den; // 分母 }; // 友元函数重载加法运算符 Fraction operator+(const Fraction& f1, const Fraction& f2) { int numerator = f1.num * f2.den + f2.num * f1.den; int denominator = f1.den * f2.den; return Fraction(numerator, denominator); } // 友元函数重载减法运算符 Fraction operator-(const Fraction& f1, const Fraction& f2) { int numerator = f1.num * f2.den - f2.num * f1.den; int denominator = f1.den * f2.den; return Fraction(numerator, denominator); } // 友元函数重载乘法运算符 Fraction operator*(const Fraction& f1, const Fraction& f2) { int numerator = f1.num * f2.num; int denominator = f1.den * f2.den; return Fraction(numerator, denominator); } // 友元函数重载除法运算符 Fraction operator/(const Fraction& f1, const Fraction& f2) { int numerator = f1.num * f2.den; int denominator = f1.den * f2.num; return Fraction(numerator, denominator); } ``` 在上述代码中,我们使用了友元函数来实现加减乘除运算符的重载。友元函数可以直接访问类的私有成员变量,因此可以进行相应的运算。通过重载加减乘除运算符,我们可以直接对两个分数对象进行运算。 下面是一个示例的使用: ```cpp int main() { Fraction f1(1, 2); Fraction f2(3, 4); Fraction sum = f1 + f2; std::cout << "Sum: "; sum.print(); Fraction diff = f1 - f2; std::cout << "Difference: "; diff.print(); Fraction product = f1 * f2; std::cout << "Product: "; product.print(); Fraction quotient = f1 / f2; std::cout << "Quotient: "; quotient.print(); return 0; } ``` 输出结果为: ``` Sum: 10/8 Difference: -2/8 Product: 3/8 Quotient: 4/6 ``` 注意,在实际应用中,还需要进行一些额外的处理,例如约分等。上述代码只是一个简单示例,仅用于说明如何使用友元函数重载加减乘除运算符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林想被监督学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值