左移运算符的应用
- 左移运算符,左移第一个操作数的位,第二个操作数决定要移动的位置
- 左移运算符还可以用于输出调试,cout << “Hello” << endl;
左移运算符的重载
- 左移运算符的重载可以帮助我们输出自定义的数据类型,或者对象属性。
- 左移运算符是不可以用成员函数进行重载的。
- 在重载函数中有访问私有成员变量时,可以配合友元一起使用。
为什么左移运算符不能通过成员函数重载呢?
- 使用成员函数重载,因为成员的第一个隐含的默认参数是this(不用写出来),必须是对象<< cout, 和平常我们使用的cout << 对象不符。
code:
#include <iostream>
using namespace std;
class Horse
{
private:
int age = 3;
string color = "white";
public:
ostream& operator<< (ostream& cout1) //成员函数隐含的第一个形参是this,使用时,只能是对象<< cout;和实际使用不符
{
cout << "age: " << age << ", color: " << color;
return cout;
}
};
int main()
{
Horse h1;
h1 << cout; // 实际使用应该是cout << h1;
system("pause");
return 0;
}
result:
age: 3, color: white请按任意键继续. . .
- 使用全局的函数进行重载
#include <iostream>
using namespace std;
class Horse
{
// 以友元的方式在全局函数内实现对私有属性的访问,全局函数做友元。
friend ostream& operator<< (ostream& cout1, const Horse& ref_h);
private:
int age = 3;
string color = "white";
};
ostream& operator<< (ostream& cout1, const Horse& ref_h) //全局函数,形参两个,第一个可以传cout,最后将cout引用方式返回,就可以实现链式编程
// ref_h并不改变其值,所以可以加const
{
cout1 << "age: " << ref_h.age << ", color: " << ref_h.color;
return cout1;
}
int main()
{
Horse h1;
cout << h1 << endl;
system("pause");
return 0;
}