读书人

重载流输出符解决思路

发布时间: 2012-02-04 15:43:09 作者: rapoo

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

#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)

读书人网 >C++

热点推荐