C++中,out<<表示什么意思,数据类型是ostream

ostream &operator<<(ostream&out,const people&r)
{
out<<r.GetName()<<"的年龄为:"<<r.GetAge()<<endl;
return out;
}

我只知道cout<< 这是输出 ,但是这个out<<是什么?能解释下这语句吗

关于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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-20
这是重载运算符的语法。

效果是:你用 << 来输出这个类的对象时,会输出out<<r.GetName()<<"的年龄为:"<<r.GetAge()<<endl;

ostream是一个数据输出流,out<<就是输出,cout也是一种输出,只不过cout是系统的标准输出。

不知道有没讲清楚= =追问

还是不懂啊,你是说out是输出??但是程序运行起来,根本没有输出啊

追答

你这个应该是一个类里面的一段吧,你需要在外面调用它。

比如

cout << a;//a是people类的一个对象

追问

但是我这个例子中,并没有输出任何东西啊,能不能留个QQ我把例子传给你看看,只有几行而已

第2个回答  2014-08-20
应该是cout吧,除非你是用宏定义看可以不
相似回答