演算子のオーバーロードによって 2 つの文字列を連結できません。コードを以下に示します。
#include<iostream>
#include<string.h>
using namespace std;
class String
{
char *len;
public:
String(char *s);
void display();
String(){}
void setData(char *s);
//String(String &x);
~String();
String operator+(String);
void extend(int l);
};
void String::extend(int f)
{
len=(char *)realloc(len,(f+1)*sizeof(char));
}
String String::operator+(String x)
{
String t;
printf("%s\n",len);
t.setData(len);
t.extend(strlen(len)+strlen(x.len));
strcat(t.len,x.len);
printf("%s\n",t.len);
return (t);
}
String::~String()
{
delete len;
}
void String::setData(char *s)
{
len=(char *)calloc(strlen(s)+1,sizeof(char));
strcpy(len,s);
}
String::String(char *s)
{
len=(char *)calloc(strlen(s)+1,sizeof(char));
strcpy(len,s);
}
void String::display()
{
printf("%s\n",len);
}
int main()
{
String a=String("United ");
String b,c;
b.setData("States");
c=a+b;
c.display();
system("pause");
return 0;
}
問題は、文字列が演算子のオーバーロード関数内で連結されていることですが、オブジェクトが返され、表示関数が呼び出されると、出力がガベージ値になります。