关于C++中的重载,对于输出流的重载。
ostream &operator<<(ostream&out,const people&r);
你这个算是标准写法了:
1)为了支持连续,输出必须返回一个ostream的引用。如:cout<<a<<b;连续输出。
2)也只能返回一个ostream的引用,因为ostream类只有一个对象就是cout,ostream类是不让你自己定义对象的,该类将
构造函数、拷贝构造函数,全部声明为私有的了。返回对象会调用拷贝构造函数,调用失败,报错。
3)operator<<,重载输出需要两个参数,第一个参数必须是ostream &引用。道理同2),第二个参数为一个对象的引用或指针,可以使const也可以不是const。当然你也可以将这两个参数写反,不过你觉得那样有意义吗?继续往下看。
4)假如我们已经重载了Test类的cout是不是?那么我们就可以在
main函数里面这么用:
int main()
{
Test a("name1",16);
Test b("name2",19);
cout<<a<<b;
return 0;
}
是不是可以这么用?
那么我们将cout显示化,看它是如何调用的:
cout<<a;等价于如下:
operator(cout,a);
5)从4)我们可以很明显的看到,其实你的ostream& out其实就是
主函数传过来的cout,是不是?
好了,如果你将operator<<()里面的两个参数反着写,是不是要这样了?
operator(a,cout);?
如果这样写,那你隐式调用的时候就必须这样了:a<<cout你觉得这种写法很那个啥吗?而且这样的写法也只能每次输出一个,b<<a<<cout这样的写法也不支持。
追问但是我这个例子中,并没有输出任何东西啊,能不能留个QQ我把例子传给你看看,只有几行而已
追答80083324