연산자 오버로드로 두 문자열을 연결할 수 없습니다. 코드는 아래와 같습니다.연산자 오버로드로 인한 문자열 연결 C++
#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;
}
문제는 그 문자열 연산자 과부하 함수 내 연접되고 있지만 객체가 반환 될 때 디스플레이 함수가 호출 될 때 그 출력 쓰레기 값이다.
Btw, 연산자 +는 const로 정의되어야하고 rhs에 대한 const 참조를 가져야합니다. String :: operator ++ (String const & rhs) const {...} – chrert