原问题:http://topic.csdn.net/u/20080916/07/0eaa3e47-0a83-4e44-a773-d406ed5b8f40.html问题是解决了,可是,还有一点我不明白,为什么不能这样写呢? //拷贝构造函数 
myClass(myClass &obj) 

        this=obj.local_string;
} 他不是应该自动掉用类里面的运算符重载吗? 可是我这样写他不让我编译通过.
说是类型的问题,我对c++的类型一向很晕,
希望那位兄弟能给指点一下.这样每种构造函数写一遍分配内存,再复制字符串岂不是太不美观了?
#include<iostream> 
using namespace std;
//定义类
class myClass
{
//定义字符串类型
typedef char* string;//私有
private:
string local_string;
//取常数字符串长度
int Length(const string lpSrc)
{
//计算字符串长度
int nSize=0;
while(lpSrc[nSize]) nSize++;
return(nSize);
}
//公有
public:
//取当前字符串长度(重载)
int Length()
{
return(Length(local_string));
}
//无参构造函数
myClass()
{
//初始化变量
local_string=NULL;
cout<<"无参构造函数"<<endl;
}
//有参构造函数
myClass(const string lpSrc)
{
//计算字符串长度
int nSize=Length(lpSrc);
//分配内存
local_string=new char[(nSize+1)];
//复制数据
for(int i=0;i<nSize;i++)
{
local_string[i]=lpSrc[i];
}
//结束标志
local_string[i]=0;
cout<<"有参构造函数"<<endl;
}


//拷贝构造函数
myClass(myClass &obj)
{
/*
//计算字符串长度
int nSize=Length(obj.local_string);
//分配内存
local_string=new char[(nSize+1)];
//复制数据
for(int i=0;i<nSize;i++)
{
local_string[i]=obj.local_string[i];
}
//结束标志
local_string[i]=0;
*/
this=obj.local_string; cout<<"拷贝构造函数"<<endl;
}



//析构函数
~myClass()
{
if(NULL!=local_string)
{
delete[] local_string;
}
cout<<"析构函数"<<endl;
}


//类赋值运算
myClass& operator=(const myClass &obj)
{
if(this!=&obj)
{
//计算字符串长度
int nSize=Length(obj.local_string);
//分配内存
local_string=new char[(nSize+1)];
//复制数据
for(int i=0;i<nSize;i++)
{
local_string[i]=obj.local_string[i];
}
//结束标志
local_string[i]=0;

}
cout<<"类赋值运算函数"<<endl;
return *this;
}


//常数赋值运算
myClass& operator=(const string lpSrc)
{
//计算字符串长度
int nSize=Length(lpSrc);
//分配内存
//local_string=(char *)malloc((nSize+1) * sizeof(char));
local_string=new char[(nSize+1)];
//复制数据
for(int i=0;i<nSize;i++)
{
local_string[i]=lpSrc[i];
}
//结束标志
local_string[i]=0; cout<<"常数赋值运算函数"<<endl;
return *this;
}

//取值运算
operator string() const throw() 

return local_string;; 
}
};

解决方案 »

  1.   

     this=obj.local_string;
    =========================
    this就对象指针,类型当然出错了。
      

  2.   

    结帐,自己搞定了,写了个私有函数,初始化字符串并复制字符串内容. //复制字符串
    void copy(string &dest,const string src)
    {
    //计算字符串长度
    int nSize=Length(src);
    //分配内存
    dest=new char[(nSize+1)];
    //复制数据
    for(int i=0;i<nSize;i++)
    {
    dest[i]=src[i];
    }
    //结束标志
    dest[i]=0;
    }
      

  3.   

    //拷贝构造函数 
    myClass(myClass &obj) 

            this=obj.local_string;

    //常数赋值运算
        myClass& operator=(const string lpSrc)
        {
            //计算字符串长度
            int nSize=Length(lpSrc);
            //分配内存
            //local_string=(char *)malloc((nSize+1) * sizeof(char));
            local_string=new char[(nSize+1)];
            //复制数据
            for(int i=0;i<nSize;i++)
            {
                local_string[i]=lpSrc[i];
            }
            //结束标志
            local_string[i]=0;        cout<<"常数赋值运算函数"<<endl;
            return *this;
        }你的上面的函数肯定是不行的,因为this是对象本身,是myClass对象的指针类型,而obj.local_string是myclass的成员,operator=是给引用类型的对象赋值,而你这里用的是this是指针,所以不对。