您的位置:首页 > 编程语言 > C语言/C++

C++运算符重载笔记

2014-11-30 21:26 381 查看
今天看了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指向的对象只能读取不可修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: