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

オブジェクト上にストリームのようなインターフェイスを作成するための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

于 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 に答える