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这样的写法也不支持。追问
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<<r.GetName()<<"的年龄为:"<<r.GetAge()<<endl;
ostream是一个数据输出流,out<<就是输出,cout也是一种输出,只不过cout是系统的标准输出。
不知道有没讲清楚= =追问
还是不懂啊,你是说out是输出??但是程序运行起来,根本没有输出啊
追答你这个应该是一个类里面的一段吧,你需要在外面调用它。
比如
cout << a;//a是people类的一个对象
但是我这个例子中,并没有输出任何东西啊,能不能留个QQ我把例子传给你看看,只有几行而已
第2个回答 2014-08-20
应该是cout吧,除非你是用宏定义看可以不