今天看了c++中的運算符重載,記錄一下,以備後面查看:
#includeusing 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指向的對象只能讀取不可修改。