| 
 | 
 
 
发表于 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; 
} |   
 
 
 
 |