4

我可以重载现有类中的现有函数/运算符吗?

我试图做:

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

string& string::operator<<(const string& str) {
  this->append(str);
}

但这给了我错误:

test.cpp:5: error: too few template-parameter-lists

我怎样才能做到这一点?还是我不能?

4

3 回答 3

7

除非您修改该类的定义,否则您不能将成员函数添加到该类。改用自由函数:

string& operator<<(string & lhs, const string & rhs) {
    return lhs += rhs;
}
于 2012-07-17T04:16:22.960 回答
0

我遵从本杰明关于在string对象上创建类流接口的回答。但是,您可以使用 astringstream代替。

#include <sstream>

std::istringstream ss;
ss << anything_you_want;

std::string s = ss.str(); // get the resulting string
ss.str(std::string());    // clear the string buffer in the stringstream.

这为您提供了您想要的类似流的界面,string而无需定义新功能。

此技术通常可用于扩展string. 也就是说,定义一个提供扩展功能的包装类,并且该包装类还提供对底层string.

于 2012-07-17T05:07:41.690 回答
0

利用

std::ostringstream

#include <sstream>
#include <iostream>

using namespace std;

int main()
{
    std::ostringstream ss;
    ss << "Hello" << " " << "world";

    std::string s = ss.str(); 
    ss.str(std::string()); 

    cout << s << endl;
    return 0;
}

https://onlinegdb.com/rkanzeniI

于 2020-05-27T14:02:57.393 回答