C ++:字符串运算符重载

时间:2012-07-17 04:14:26

标签: c++ operator-overloading c++-standard-library

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

我试图这样做:

#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

我该怎么做?或者我不能?

3 个答案:

答案 0 :(得分:6)

除非修改该类的定义,否则无法将成员函数添加到类中。请改用免费功能:

string& operator<<(string & lhs, const string & rhs) {
    return lhs += rhs;
}

答案 1 :(得分:0)

我遵从Benjamin的答案,在string对象上创建类似于流的界面。但是,您可以使用stringstream代替。

#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的访问。

答案 2 :(得分: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