C++重载赋值运算符

来源:互联网 发布:人工智能辅助器具研发 编辑:程序博客网 时间:2024/06/08 10:02


#include <iostream>
#include<cstring>
using namespace std;
class name
{
    public:
    name(char*pn='\0');
    name(const name&);
    name&operator=(name);
    //~name();
    protected:
    char*pname;
    int size;
};
name::name(char*pn)
{
    cout<<"constructing "<<pn<<endl;
    size=strlen(pn);
    pname=new char[size+1];//分配空间
    if(pname!=0)//还不懂什么意思
    strcpy(pname,pn);
}
name::name(const name&obj)
{
    cout<<"copying"<<obj.pname<<"into its own block\n";
    size=obj.size;
    pname=new char[size+1];
    if(pname!=0)
    strcpy(pname,obj.pname);
}
name&name::operator=(name obj)
{
    //delete[]pname;
    size=obj.size;
    //pname=new char[size+1];
    //if(pname!=0)
    strcpy(pname,obj.pname);
    return*this;
}
/*name::~name()
{
    cout<<"destructing "<<pname<<endl;
    pname[0]='\0';
    delete[]pname;
    pname=NULL;
    size=0;
}*/
int main()
{
    name obj1("zhangsan");
    name obj2=obj1;
    name obj3("noname");
    obj3=obj2=obj1;
    return 0;
}

还不懂为什么要用两个复制构造函数,为什么要用const,为什么是if(pname!=0),pname不是定义为char???当obj1被赋值时,为什么第二个复制构造函数不用执行。

0 0