C++学习记录-面向对象-运算符重载2-左移运算符重载

一、

左移运算符重载,若写在类内作为成员函数,则调用时要 参数在前,cout在后,效果不行

因此,左移运算符重载应当作为全局函数

二、语法与示例

语法: 返回值类型 operator符号**(参数列表)** {方法}

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class chara {
public:
string name;
string weapon;
public:
chara(string a, string b) :name(a),weapon(b) {}
};

//全局函数重载左移运算符
void operator<<(ostream &cout, chara& p)
{
cout << p.name << endl;
cout << p.weapon << endl;
}
1
2
chara sllh("神里绫华", "单手剑");
cout << sllh;

运行结果:

神里绫华
单手剑

D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 28680)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

注意:

  1. 在本重载函数中,函数要求左边传入的参数是 cout,则在参数列表应写cout的类型接上对cout的引用。cout的类型可以 右键cout->转到定义 查看
  2. 本重载函数因为返回值类型写了void,所以无法在<<sllh后面接上<<endl;若要实现此功能应将返回值类型写为 ostream&(这个引用很关键,因为传入的cout也是引用)
1
2
3
4
5
6
ostream& operator<<(ostream &cout, chara& p)
{
cout << p.name << endl;
cout << p.weapon << endl;
return cout;
}
1
2
3
chara sllh("神里绫华", "单手剑");
cout << sllh << endl;
cout << "hello";

运行结果:

神里绫华
单手剑

hello
D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 20508)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .