【发布时间】:2012-11-28 09:15:18
【问题描述】:
我认为在
cout << "Hello world"
cout 对象有一个运算符重载,因此我们可以将strings 传递给cout 对象成员函数。
但在一些示例代码中,我看到一个类中定义了运算符重载。
class GenericPlayer : public Hand
{
..
friend ostream& operator <<(ostream& os, const GenericPlayer& aGenericPlayer);
..
};
...
cout << aGenericPlayer << endl;
...
即使不是,如果cout和aGenericPlayer都超载operator<<怎么办?
【问题讨论】:
-
您是在问
cout和GenericPlayer是否都为GenericPlayer定义了插入运算符(<<)? -
如果
operator<<的多个定义与给定的操作数匹配,则根据C++03 §13.3[over.match]中规定的复杂重载决议规则选择“最佳”匹配。如果“最佳”匹配不是唯一的或不存在,则为错误。