首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

重载流输出符解决思路

2012-02-04 
重载流输出符请问为什么下面这个程序输出那么多星号?#includeiostream#includestringusingnamespacest

重载流输出符
请问为什么下面这个程序输出那么多星号?

#include   <iostream>
#include   <string>
using   namespace   std;

ostream   operator < <(ostream   &   os,const   string   str);

int   main()
{
string   str1= "wm! ";
cout < <str1;
      return   0;
}


ostream   operator < <(ostream   &   os,const   string   str)
{
os < < "***   *** " < <str < <endl;
return   0;
}



[解决办法]
编译应该会出错的


星号是因为递归调用
[解决办法]
因为cout < <str1这条语句被重载了...当编译器看支这条语句时其实是指定运行那个重载函数
ostream operator < <(ostream & os,const string str)所以当然会有*号啦....
[解决办法]
#include <iostream>
#include <string>
using namespace std;

ostream operator < <(ostream & os,const string str);

int main()
{
string str1= "wm! ";
cout < <str1;
return 0;
}


ostream operator < <(ostream & os,const string str)
{
os < < "*** *** " < <endl;
return 0;
}

这样就是对的,你的重载没有实现连续输出。

若要连续输出。就要返出对像引用。
ostream & operator < <(ostream & os,const string str)

热点排行