一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情。
- 运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
1.1加号运算符重载
- 运算加号运算符重载的作用:实现两个自定义数据类型相加的
1. 成员函数实现 + 号运算符重载
class books{
public:
string book01;
string book02;
books operator+(books &h) {
books H ;
H.book01 = this->book01 + h.book01;
H.book02 = this->book02 + h.book02;
return H;
}
};
int main() {
books h01;
books h02;
books h03;
h01.book01 = "有顶天";
h02.book01 = "家族";
h01.book02 = "黑魔法";
h02.book02 = "手贴";
h03 = h01 + h02;//相当于h03 = h01.operator+(h02)
cout << h03.book01 << endl;
cout << h03.book02 << endl;
system("pause");
return 0;
}
输出:
有顶天家族
黑魔法手贴
请按任意键继续. . .
2.全局函数实现 + 号运算符重载
books operator+(books &h_00,books &h_01) {
books H ;
H.book01 = h_00.book01 + h_01.book01;
H.book02 = h_00.book02 + h_01.book02;
return H;
}
int main() {
books h01;
books h02;
books h03;
h01.book01 = "有顶天";
h02.book01 = "家族";
h01.book02 = "黑魔法";
h02.book02 = "手贴";
h03 = h01 + h02;//相当于h03 = operator+(h01,h02)
cout << h03.book01 << endl;
cout << h03.book02 << endl;
system("pause");
return 0;
}
输出:
有顶天家族
黑魔法手贴
请按任意键继续. . .
3. 运算符重载 可以发生函数重载
books operator+(books &h_00,books &h_01) {
books H ;
H.book01 = h_00.book01 + h_01.book01;
H.book02 = h_00.book02 + h_01.book02;
return H;
}
books operator+(books &h_00,string a) {
books H ;
H.book01 = h_00.book01 + a;
// H.book02 = h_00.book02 + b;
return H;
}
h04 = h01 + string("家族") ;
cout << h04.book01 << endl;
注意: 重载的参数不能超过两个
books operator+(books &h_00,string a,string b) {
books H ;
H.book01 = h_00.book01 + a;
H.book02 = h_00.book02 + b;
return H;
}
//错误提示:[Error] 'books operator+(books&, std::string, std::string)' must take either one or two arguments
1.2 左移运算符重载
作用: 可以输出自定义数据类型
class books{
friend ostream& operator<<(ostream& cout,books &h01);
public:
books()
{
book01 = "有顶天家族";
book02 = "黑魔法手贴";
}
//成员函数 实现不了 h00 << cout 不是我们想要的效果
//void operator<<(books& h00){
//}
private:
string book01;
string book02;
};
//全局函数实现左移重载
//ostream对象只能有一个
ostream& operator<<(ostream& cout,books &h01) {
cout << h01.book01 << endl;
cout << h01.book02<<endl;
return cout;
}
//相当于下面的语句
//ostream& operator<<(ostream& out,books &h01) {
// cout << h01.book01 << endl;
// cout << h01.book02<<endl;
// return out;
// }
//cout << h01 << endl;
输出:
有顶天家族
黑魔法手贴
请按任意键继续. . .
1.3 递增运算符重载
作用: 通过重载递增运算符,实现自己的整型数据
class books{
//<< 接的后++返回值是books型,所以<<传入参数用books才不会错
friend ostream& operator<<(ostream& cout,books h01);
public:
//记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++;
//后置++ 先返回 再++
books operator++(int){
books h00 = *this;
a++;
return h00;
}
//前置++ 先++ 再返回
books& operator++(){
a++;
return *this;
}
private:
int a = 0;
};
ostream& operator<<(ostream& cout,books h01) {
cout << h01.a << endl;
return cout;
}
books h01;
cout << h01++ << endl;
cout << h01 << endl;
cout << ++h01 << endl;
cout << h01 << endl;
输出:
0
1
2
2
请按任意键继续. . .