运算符<<重载如何工作?

tam*_*aka 5 c++

给出一个类:

struct employee {
    string name;
    string ID;
    string phone;
    string department;
};
Run Code Online (Sandbox Code Playgroud)

以下功能如何工作?

ostream &operator<<(ostream &s, employee &o)
{
 s << o.name << endl;
 s << "Emp#: " << o.ID << endl;
 s << "Dept: " << o.department << endl;
 s << "Phone: " << o.phone << endl;

 return s;
}
Run Code Online (Sandbox Code Playgroud)

cout << e;生成给定的格式化输出employee e.

示例输出:

Alex Johnson
Emp#: 5719
Dept: Repair
Phone: 555-0174
Run Code Online (Sandbox Code Playgroud)

我无法理解ostream功能是如何工作的.它如何获得参数"ostream&s"?它如何重载"<<"运算符以及<<运算符如何工作?如何用它来写出关于员工的所有信息?有人可以用外行的话回答这些问题吗?

sta*_*nov 9

这称为重载分辨率.你写的cout << *itr.编译器把它作为operator<<(cout, *itr);其中cout的一个实例,如果ostream*itr是员工的一个实例.您已经定义了void operator<<(ostream&, employee&);与您的呼叫最匹配的功能.因此,它的执行传递couts*itro