重载operator + char

时间:2017-10-29 20:20:43

标签: c++ operator-overloading

我尝试做练习并遇到问题。

我不知道如何重载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;

2 个答案:

答案 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”);