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

CPP操作符重载

2016-02-23 21:21 204 查看

1在类中重载+=操作符

赋值操作符必须定义为成员函数,无论形参为何种类型

赋值必须返回*this 的引用

class Love{

public:

int str;

int agi;

int intel;

Love(): str(0), agi(0) , intel(0){}

Love(int a , int b ,int c): str(a), agi(b) , intel(c){};

Love& operator+=(const Love &test){

str += test.str;

agi += test.agi;

intel += test.intel;

return *this;

}

};


int main(){

Love boy ,girl(10,20,30);

boy += girl;

cout << boy.str << boy.agi << boy.intel << endl;

return 0;

}


在类外面重载+号

class Love{

public:

int str;

int agi;

int intel;

Love(): str(0), agi(0) , intel(0){}

Love(int a , int b ,int c): str(a), agi(b) , intel(c){};

};

//为了与内置操作符保持一致,加法返回一个右值,而不是引用

Love operator+(const Love &fir, const Love &sec){

Love ans;

ans.str = fir.str + sec.str ;

ans.agi = fir.agi + sec.agi ;

ans.intel = fir.intel + sec.intel;

return ans;

}


在类外面的输入输出操作符

为什么IO操作符必须为非成员函数?

因为做操作数只能是该类类型的对象

比如 Love item;

item << cout ;


由于IO操作符通常对非公用数据成员进行读写,所以通常将IO操作符

设定为友元

class Love{

public:

int str;

int agi;

int intel;

Love(): str(0), agi(0) , intel(0){}

Love(int a , int b ,int c): str(a), agi(b) , intel(c){};

friend istream& operator>>

(istream& , Love&);

friend ostream& operator<<

(ostream& , const Love&);

};

//要有处理错误和文件结尾的措施

istream& operator>>(istream& in, Love &s){

in >> s.str >> s.agi >> s.intel;

if( !in )

Love(0,0,0);

return in;

}

ostream&

operator<<(ostream& out ,const Love &s){

out << "str:=" << s.str << " agi:="

<< s.agi << " Int:=" << s.intel;

return out;

}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作符重载 cpp