C++运算符重载笔记

今天看了c++中的运算符重载,记录一下,以备后面查看:

#include <iostream>
using namespace std;

class F{
	int n;
	int d;
	void reduce(){
		int mcd = maxcd(n < 0 ? -n : n, d);
		if(mcd != 1){
			n /= mcd;
			d /= mcd;
		}
	}

	public:
	F(int n=0, int d=1):n(n), d(d){
		if(d == 0) throw "分母不能为零";
		if(d < 0) {
			this->d = -this->d;
			this->n = -this->n;
		}
		reduce();
		cout << "F(" << n << '/' << d << ")" << endl;
	}

	static int maxcd(int a, int b){
		if(a == 0) return b;
		return maxcd(b%a, a);
	}

	friend ostream& operator<<(ostream& o, const F& f){
		o << f.n << '/' << f.d;
		return o;
	}

	friend F operator+(const F& lh, const F& rh){
		return F(lh.n * rh.d + lh.d * rh.n, lh.d * rh.d);
	}

	//成员函数,少一个参数(当前对象作为第一个操作数)
	F operator*(const F& rh)const{
		//匿名对象
		return F(n*rh.n, d*rh.d);
	}	

	friend F operator~(const F& f){
		return F(f.d, f.n);
	}

	bool operator!()const{
		return n==0;
	}
};

int main(){
	F f1;
	F f2(3);
	F f3(6, 12);
	F f4(5, 3);
	F f5(2, 9);
	cout << f3 << ',' << f4 << endl;
	cout << F::maxcd(392, 856) << endl;
	cout << f3 + f4 << endl;
	cout << f3*f4 << f2 * f3 * f4 << endl;
	cout << "~f3 = " << ~f3 << endl;
	cout << "!f3 = " << !f3 << endl;

	return 0;
}

注意点:

1、匿名对象

2、成员函数和友元函数对运算符重载的区别

3、临时变量只能传给引用常量(const F&),比如f1 + f2 + f3中f1 + f2返回的是一个临时变量

4、友元函数既可以在类内部实现,也可以在类外部实现,不属于类的成员函数

5、const加在方法上则说明该方法内的this指向的对象只能读取不可修改。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值