物件的複製和賦值
阿新 • • 發佈:2018-12-04
物件的複製是在物件宣告時進行的操作,而賦值是在宣告之後的操作。一般而言,複製的語法為A a(b),A為類,b為已經定義的物件,a為複製b的物件;賦值的語法為A a;a = b;需要先宣告物件a,之後再對其進行賦值。
有一種特殊的情況,A a=b;雖然是使用了操作符=,但由於是在物件宣告時,進行定義,所以依然呼叫複製方法。
下面程式碼為物件的複製和賦值操作。
#include <iostream> #include <string> using namespace std; class Dul_Ass { private: int x; string s; public: Dul_Ass (): x(1), s("abc") {}; Dul_Ass (int a, string c): x(a), s(c) {}; //物件複製 Dul_Ass(const Dul_Ass & src): x(src.x), s(src.s) {}; //物件賦值 Dul_Ass& operator = (const Dul_Ass &src); //輸出元素 void print_val() const; }; //物件複製 Dul_Ass& Dul_Ass::operator = (const Dul_Ass& rhs) { //如果是自賦值,直接返回函式本身 if(this == &rhs) return *this; else { x = rhs.x; s = rhs.s; return *this; } } void Dul_Ass::print_val(void) const { cout << "x = " << x << "; s = " << s << endl; } int main(void) { Dul_Ass a(2, "def"); Dul_Ass b(a); Dul_Ass c; c = a; b.print_val(); c.print_val(); return 0; }
物件複製:
Dul_Ass(const Dul_Ass & src): x(src.x), s(src.s) {};
不需要返回值,函式的輸入引數為物件。
物件賦值:
Dul_Ass& operator = (const Dul_Ass &src);
相當於定義了一個“=”操作符,函式的返回型別為一個物件型別,並且還可以是引用返回(類內的函式可以,普通的函式呼叫不可以返回引用值)。為了減小字元值的資源浪費,進行了
//如果是自賦值,直接返回函式本身
if(this == &rhs)
return *this;
this指標指向呼叫該函式的物件。
一般而言,建立類時會預設建立複製,賦值方法,除非類方法中建構函式使用了指標,一般是不需要寫複製,賦值方法的。