C++ 运算符重载+;用于字符串连接

C++ 运算符重载+;用于字符串连接,c++,inheritance,operator-overloading,C++,Inheritance,Operator Overloading,我面临字符串连接的“+”运算符重载问题。 这是代码 #include <iostream> #include <cstring> #include <new> using namespace std; class kinda { int a; public: char *name; kinda() { //cout<<"in base class constr"<<en

我面临字符串连接的“+”运算符重载问题。 这是代码

#include <iostream>
#include <cstring>
#include <new>

 using namespace std;

class kinda
{
int a;


    public: 
        char *name;
    kinda()
    {
        //cout<<"in base class constr"<<endl;
        a=100;
        name=new char[strlen("sumnesumne")+1];  
        strcpy(name,"sumne");
        //name="sumne";
    }

    ~kinda()
    {
        //cout<<"in base class destr"<<endl;
        delete name;
    }

    kinda(int val,char *naam)
    {
        //cout<<"in base class param constr"<<endl;
        a=val;
        name= new (char) (strlen(naam)+1);
        strcpy(name,naam);
    }

    kinda(kinda &obj)
    {
        //cout<<"in base class copy constr"<<endl;
        a=obj.a;
        name= new (char) (strlen(obj.name)+1);
        strcpy(name,obj.name);
    }

    void display()
    {
        //cout<<"in base class display()"<<endl;
        cout<<"a="<<a<<endl;
        cout<<"name="<<name<<endl<<endl;
    }
};


class kinda2 : public kinda
{

int ab;
public :

kinda2()
{
    //cout<<"in der class default constr"<<endl;
    ab=100;
}

kinda2(int val)
{
    //cout<<"in der class param constr"<<endl;
    ab=val;
}
void dis()
{
    //cout<<"in der class display()"<<endl;
    cout<<"ab : "<<ab <<endl;
    display();
}

kinda2 operator+(const kinda2& ob)
{
    kinda2 retobj;
    //cout<<"in der class op overloading"<<endl;

    retobj.ab= ab + ob.ab;
    cout<<" before : "<< retobj.name<<endl;
    strcpy(retobj.name,name);
    cout<<"middle : "<< retobj.name<<endl;
    strcat(retobj.name,ob.name);
    cout<<"after : "<<retobj.name<<endl;
    return retobj;


}

};

int main()
{
    kinda ob(7,"pachka"),ob1(ob);
    kinda2 ob2,ob3,ob4;

/*  cout<<"ob details:"<<endl;
ob.display();

//ob1(ob);
cout<<"ob1 details:"<<endl;
ob1.display();
*/
    cout<<"ob2 details:"<<endl;
ob2.dis();
cout<<"ob2 details:"<<endl;
ob3.dis();

ob4=ob2+ob3;

ob4.dis();
return 0;
}
在运算符重载函数中,它显示正确的值。
但是在display()中,我看到了一些意想不到的值。

。表达式
name=new(char)(strlen(obj.name)+1)没有达到您期望的效果。你不使用的原因是什么?没有具体的原因。。。我只是在尝试基本的编码。复制构造函数
kinda(kinda&obj)
应该采用
const-kinda&obj
。和
new(char)(strlen(naam)+1)是错误的。。。在长度周围使用
[]
s。是的。。。尝试修改上述更改。。。。但是输出仍然是一样的。。!!
ob2 details:
ab : 100
a=100
name=sumne

ob2 details:
ab : 100
a=100
name=sumne

 before : sumne
middle : sumne
after : sumnesumne
ab : 200
a=100
name=X☺2


--------------------------------
Process exited with return value 3221226356
Press any key to continue . . .