|
发表于 2016-1-12 19:37:58
|
显示全部楼层
其实istream类将>>运算符重载了,
而cin是istream类的一个对象,cout是ostream的一个对象
cin>>调用的就是istream类的一个成员函数:
istream& operator>>(int& nNum);
所以cin>>的返回值是istream& ,
istream& 的意思就是istream类的对象的引用,
为什么要这样呢?
你看看cout的例子就知道了
如:
cout<<nNum1<<nNum2;
这看似一条语句,其实是两条语句:
cout <<nNum1;
cout<<nNum2 ;
据上所知,cout是ostream的一个对象,这个对象是全局的,你包含了<iostream>这个头文件时,你就又了cout这个变量。
所以cout最终调用的是一个ostream类的成员函数
成员函数的大概实现如下:
ostream& operator<<(int nNum)
{|
printf("%d",nNum);
return *this
}
这样就可以输出nNum1了,为什么要返回*this呢?
因为返回类型是ostream& , 那么*this是什么?
哪个对象调用了成员函数,谁就是this。
返回*this有什么用呢?
如果重载<<运算符返回的是一个整数,那么cout<<nNum1后面就无法使用<<nNum2了
因为这个整数不是类对象,它没有重载运算符,对于整数,<<是左移操作,而<<右边却不是整数,编译器只能报错。
但如过返回类型是cout的话,cout<<nNum1是一个函数,函数处理完了就会将cout返回,那么cout<<nNum2就可以
按cout<<nNum1一样的处理方法去处理了。
同理,cin>>nNum1>>nNum2也是一样的
istream& operarot>>(int& nNum)
{
scanf("%d",&nNum);
return *this;
} |
|