ostream & operator<<(ostream &out) const
{
if(str != NULL)
{
out << str;
}
return out;
}
上述代码中最后为啥要return out这个操作
而且假设现在有一个对象S
S << cout和cout << S这俩玩意一样不 这个C++这块好难理解啊
ostream & operator<<(ostream &out) const
{
if(str != NULL)
{
out << str;
}
return out;
}
上述代码中最后为啥要return out这个操作
而且假设现在有一个对象S
S << cout和cout << S这俩玩意一样不 这个C++这块好难理解啊
不是一样的。那个operator重载的第一个参数就是ostream对象。
就像:
ostream& operator(ostream& os, ClassA a){
//………………
return os;
}
如果使用以下代码:
ClassA cla;
cout << cla; //等价于operator<<(cout,cla);
那么传入operator<<的参数中,os是cout,a就是cla。
至于你写到运算符只有一个参数,然而<<是二元运算符,所以你这个应该定义在类里。
而且如果定义在类里,就要将对象放在运算符前面,而且cout没有定义那种运算符。
就像:
class S{
public:
std::ostream& operator<<(std::ostream& os){ //标记:1
//insert your code
return os;
}
};
std::ostream& operator<<(std::ostream& os,S s){ //标记:2
//insert your code
return os;
}
int main(){
using namespace std;
S s;
cout << s; //调用2
s << cout; //调用1
}