拷貝建構函式和賦值函數的區別:看看下面代碼,仔細想想兩者的區別。
拷貝建構函式是在定義一個對象的時候調用的,如
Class String{//....};String a=b;//b為一個String類型的對象或者String a(b);
賦值函數是在用一個類的執行個體去賦值給另一個執行個體的時候調用的,如
String a;a=b;
類String的建構函式、解構函式和賦值函數的原型分別如下:
class String{public:String(const char *str=NULL);//建構函式String(const String &other);//拷貝建構函式~String(void);//解構函式String &operator=(const String &other);//賦值函數private:char *m_data;//儲存字串};//constructorString::String(const char *str){if(str==NULL){m_data=new char[1];m_data[0]='\0';}else{int len=strlen(str);m_data=new char[len+1];assert(m_data!=NULL);strcpy(m_data,str);}}//copy constructor:使用在定義一個類型變數的時候String::String(const String &other){int length=strlen(other.m_data);m_data=new char[length+1];assert(m_data!=NULL);strcpy(m_data,other.m_data);}//destructorString::~String(void){delete []m_data;}//賦值函數:使用在把一個類的執行個體賦值給另一個類的執行個體 String &String::operator = (const String &other){if(this==&other){return *this;}delete []m_data;int length=strlen(other.m_data);m_data=new char[length+1];assert(m_data!=NULL);strcpy(m_data,other.m_data);return *this;}