class
a;
以上**的建構函式就是拷貝建構函式。
上面的**中的a(const a&);
若改a(const a&)=default
則它等價於以下**:
a
(const a& member):a
(member.a),c
(member.c),b
(member.b),s
(member.s),f
(member.f)
我們看到,每個資料成員都被拷貝了一次(member.成員)來初始化。
詳見類(六),
過載拷貝賦值運算子就是operator=
。
在c++中,為了阻止呼叫某個函式,我們可以用=delete來宣告它,如:阻止拷貝:
class
a;
如上面的**,我們不能拷貝a的物件。
在乙個類中,建構函式和析構函式是不可刪除的。因為如果刪除了這些函式,那麼我們將無法建立這個類型別的物件。
類(七)《一談類的更深與番外》 (四)移動
移動是指將右值移動,因此,我們首先要知道什麼是左值,什麼是右值。1.變數是左值int i 5 左值 int r i 左值引用 int o i 錯誤,i是左值2.表示式是右值int i 4 int r i 16 這是右值!注意 右值引用也是左值!由於變數都是左值,所以右值引用也是左值!以下 是錯誤的!...
類的拷貝 賦值與銷毀
拷貝建構函式 拷貝賦值運算子 移動建構函式 移動賦值運算子 析構函式 當定義乙個類時,我們顯式和隱式地指定在此型別物件的拷貝 移動 賦值和銷毀時做些什麼。而乙個類通過定義上述五種特殊的成員函式來控制這些操作。拷貝和移動建構函式定義了當同型別的另乙個物件初始化本物件時做什麼。拷貝和移動賦值運算子定義了...
私有成員變數的訪問(類內與類外)
1 class ctest 1011 ctest ctest int i value i 1215 16 ctest ctest const ctest rhs value rhs.value 1720 21 ctest ctest operator const ctest rhs 2229 30v...