我尝试做练习并遇到问题。
我不知道如何重载operator + for char;
目的是解决这些等式:
cout<<"Please enter here a title: "<<endl;
cin>>s2;
s1="I am a " + s2;
String类的私有部分:
private:
char * str; // pointer to string
int len; // length of string
static int num_strings; // number of objects
static const int CINLIM = 80;
我尝试了以下代码,但它不起作用:
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;
}
有人可以提示吗?
P.S。 String类包含char * str和int len;
答案 0 :(得分:1)
除非至少有一个操作数具有类或枚举类型,否则不会考虑重载运算符。在表达式"Hello" + "I am"
中,操作数具有类型const char[6]
和const char[5]
,它们都可以衰减到const char*
,但由于此处只涉及内置类型,因此您的自定义{{1}什么都不做。
您需要明确告诉编译器将至少一个操作数转换为operator+
类型,如String
。
(或者如果你想定义一个用户定义的文字运算符,你可以将其写成String("Hello") + "I am"
之类的东西。)
答案 1 :(得分:0)
为什么不尝试这样的事情
std :: string str =“str1”+ std :: string(“str2”);