程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++運算符重載筆記

C++運算符重載筆記

編輯:C++入門知識

C++運算符重載筆記


今天看了c++中的運算符重載,記錄一下,以備後面查看:

#include 
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指向的對象只能讀取不可修改。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved