运算符重载小程序1

//运算符重载要考虑形参(const 引用)还有返回临时值不能用引用

 #include <iostream>
using namespace std;

class F{
public:
	F(int n=0,int d=1):n(n),d(d){
		if(d==0) throw 0;
		if(d<0) this->d=-d,F::n=-n;//保证分母是正的
		reduce();
	};
	~F(){};
	friend ostream& operator<<(ostream &out,const F &f)
	{
		out<<f.n<<"/"<<f.d;
		return out;
	}
	friend F operator+(const F &l,const F &r)//引用不可改(f1+f2)+f3,,
	//若要连加的话,(f1+f2)临时值就相当于const F &l,去掉const不可以,因为引用常量或临时值得加const
	{
		return F (l.n*r.d+r.n*l.d,l.d*r.d);
	}

private:
	int n,d;
//约分
	void reduce(){
		int mcd=maxcd(n<0?-n:n,d);
		if(mcd!=1) n/=mcd,d/=mcd;
	};
//递归最大公约数
	static int maxcd (int a,int b){//静态成员函数不能用this
		if(a==0) return b;
		return maxcd(b%a,a);
	}
};

int main(void)
{
	F f1;
	F f2(3,4);
	F f3(8,12);
	cout<<f2<<endl;
	cout<<f3+f2<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值