複製類別物件
指派運算和初始化作業造成物件複製。
指派:將物件的值指派給另一個物件時,第一個物件複製到第二個物件。 因此,
Point a, b; ... a = b;
造成 b 的值複製到 a。
初始化:初始化發生時,新的物件時,宣告,在引數傳遞至函式值時,或者,當值從函式傳回的值時。
您可以定義「Copy」語意類別型別的物件。 例如,請考慮下列程式碼:
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
上述程式碼可能表示「複製 FILE1.DAT 內容至 FILE2.DAT」或其可能表示「ignore FILE2.DAT 並進行 b 第二個控制代碼 FILE1.DAT」。您必須附加適當複製語意到每一個類別,如下所示。
您可以使用含有參考來指派運算子 operator= 對類別型別做為傳回型別並傳遞 const 參考 (例如 ClassName& operator=(const ClassName& x);的參數。
使用複製建構函式。 如需複製建構函式的詳細資訊,請參閱 宣告建構函式的規則。
如果您沒有宣告複製建構函式,則編譯器會產生成員複製建構函式。如果您沒有宣告複製指派運算子,編譯器會產生成員複製指派運算子。宣告複製建構函式不會隱藏編譯器產生的複製指派運算子,也不反之亦然。 如果您實作任一個,建議您一起實作另一個,讓程式碼的意義清楚。
成員指派在 對工作分派和初始化較詳細說明。
複製建構函式接受型別 類別名稱**&**的引數,其中 類別名稱 是建構函式定義類別的名稱。 例如:
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
![]() |
---|
將這個型別的複製建構函式的引數 const 類別名稱& 盡可能。這樣可避免複製建構函式不小心變更複製的物件。它也會複製 const 物件。 |