我们都知道,在C++里面 cout << 可以打印基本的数据类型 和 string (需要导入string的头文件)的数据,但是如果我们要它打印一个对象呢?比如有一个 Person person对象,我们如何实现 cout << person; 来打印person的所有属性?这时候我们需要通过operator<< 函数来实现左移运算符的重载。
具体实现看下面的代码。
Person类的实现
#include<iostream>
#include<string>
using namespace std;
//自定义Person类
class Person
{
public:
Person();
Person(string name, int age);
~Person();
void show();//打印成员属性类容的成员函数
string getm_Name();
int getm_Age();
private:
//两个私有的属性(姓名和年龄)
string m_Name;
int m_Age;
};
Person::Person()
{
}
Person::Person(string name, int age)
{
m_Name = name;
m_Age = age;
}
Person::~Person()
{
}
//打印成员属性类容的成员函数
void Person::show()
{
cout << "姓名:" << this->m_Name << " 年龄:" << this->m_Age << endl;
}
string Person::getm_Name()
{
return this->m_Name;
}
int Person::getm_Age()
{
return this->m_Age;
}
左移运算符的重载
//左移运算符的重载
ostream & operator<<(ostream &sout,Person &person)
{
// 这里它默认在创建ostream类型的引用的时候让 cout 给 sout 赋值了
sout << "姓名:" << person.getm_Name() << " 年龄:" << person.getm_Age();
return sout;
}
main函数的实现类容
int main()
{
Person person("马力欧", 22);
//通过左移运算符重载直接打印person这个对象
cout << person << endl;
//cout << person.getm_Age() << endl;
// 其实ostream & operator<<(ostream &sout, Person &person)的实现和下面两行代码一样
ostream &mycout = cout;
mycout << "在用mycout打印输出" << endl;
person.show();
return 0;
}
输出结果