2017-10-29 31 views
-1

私は練習をして問題を起こそうとします。オーバーロード演算子+ char

私はcharの演算子+をどのようにオーバーロードするのか分かりません。

cout<<"Please enter here a title: "<<endl; 
cin>>s2; 
s1="I am a " + s2; 

Stringクラスのプライベート一部:

目的は、これらの方程式を解くことである

String operator+(const String &st1, const String &st2) 
{ String sum; 
    int len1=std::strlen(st1.str); 
    int len2=std::strlen(st2.str); 
    int lenges=len1+len2; 
    sum.str=new char[lenges+1]; 

    char *a=st1.str; 
    char *b=st2.str; 

    while(*a++) {*a++;} 
    while(*b++) {*a=*b;} 

    sum.str=st1.str; 

return sum.str; 
} 
:私は次のコードを試してみましたが、それは仕事をdoesntの
private: 
char * str; // pointer to string 
int len; // length of string 
static int num_strings; // number of objects 
static const int CINLIM = 80; 

誰かにヒントを与えることはできますか?

P.S. Stringクラスにはchar * strとint lenが含まれています。

+1

"Hello"または "I am"のどちらも 'String'ではないので、2つの' String'を取る 'operator +'はそれらには適用できません。より一般的には、基本型だけで動作する演算子をオーバーロードすることはできません(ヘッダーをインクルードし、 '2 + 2!= 4'で終わると悪夢になります)。とにかく、ここで「方程式を解く」とはどういう意味ですか? –

+0

'String'クラスを表示してください。 – wally

答えて

1

少なくとも1つのオペランドにクラスまたは列挙型がない限り、オーバーロードされた演算子は考慮されません。式"Hello" + "I am"では、オペランドの型はconst char[6]const char[5]です。両方ともconst char*に減衰できますが、組み込み型のみがここに含まれているため、カスタムoperator+は何も行いません。

String("Hello") + "I am"のように、少なくとも1つのオペランドをStringタイプに変換するようコンパイラに明示的に指示する必要があります。

(またはユーザー定義リテラル演算子を定義したい場合は、"Hello"_str + "I am"_strのようなものとして、これを書くことができるでしょう。)

+0

私はdownvoteが何であるか分かりません。 – wally

+0

あなたは何をお勧めしますか? – Perilun

0

をあなたはこの

のstd ::文字列のような何かをしようといけないのはなぜstr = "str1" + std :: string( "str2");

+0

int main関数またはオーバーロードの意味ですか? – Perilun

関連する問題