.類複製控制
(前言,定義,基類與派生類,設計指導)
1.前言
複製控制通常指類的複製建構函式,賦值操作運算子,析構函式
1.1複製建構函式
引入複製建構函式是為了讓類的物件直接生成另乙個物件,同時把此物件的資料複製到另乙個物件中
如果類中沒有實現複製建構函式,編譯器自動新增乙個,
如果我們不需要,則把它明確的禁止,禁止方法是在private宣告乙個
2.定義
2.1複製建構函式的2種方法實現
base(const base& org):x(org.x),y(org.y){} //用初始化列表方式實現
base(const base& org) //用傳統函式方式初始化成員
複製建構函式沒有返回值,是一種特別的建構函式,自動可以用建構函式的初始化列表示式
demo c(b); //觸發呼叫複製建構函式
2.2賦值操作運算子
通過過載運算子=,達到類的物件之間可以賦值功能,簡化類物件的操作
但返回值必須有this指標的指向的引用"*this"
b=c;
//觸發呼叫賦值操作運算子
2.3**例子:
#include
class demo//無引數的建構函式
demo(int a1,int b1):x(a1),y(b1){}//有預設值引數的建構函式
void setxy(int a=0,int b=0) //修改x,y成員
void print() //複製建構函式
demo& demo::operator=(const demo& rhs) //賦值操作運算子
~demo(){}//析構函式
protected:
int x;
int y;
};class derived :public demo//無引數的建構函式
derived(int a2,int b2,int c2):demo(a2,b2),z(c2){}//有預設值引數的建構函式
//重寫print()
void print() //複製建構函式
derived& derived::operator=(const derived& rhs)//賦值操作運算子
return *this;
}~derived(){}//析構函式
private:
int z;
};int main()
//以上**用dev-c++測試通過
3.基類與派生類
原則上基類複製控制由基類的成員函式完成,派生類由派生類完成
在派生類進行複製控制時,要特別注意要把從基類繼承而來的成員也要初始化或者賦值,
因為名稱一樣,它在派生類找到這個函式名稱後就不會再往上查詢基類的函式,
這直接引發派生類函式"覆蓋"了基類的同名函式,
從基類往派生類產現來看,又叫做派生類的函式"重寫"
結果我們的選擇:
只能在派生類的複製控制函式加上呼叫基類的複製建構函式
只能在派生類的 賦值操作符加上呼叫基類的賦值操作符
3.1派生類的複製建構函式實現
//基類
class derived :public demo;
4.設計指導
在基類的複製控制:有乙個"三實現"原則,複製建構函式,賦值運算子,析構函式只要出現乙個,就盡量實現三個
在派生類的複製控制,請直接呼叫基類的複製函式來實現不同的分工
在派生類的析構函式只呼叫派生類,基類也只呼叫基類的
11 C語言陣列
陣列的幾個名詞 陣列的應用場景 include int main int argc,const char ar int 元素型別 ages 陣列名稱 10 元素個數 int ages 10 int ages 3 int nums int nums 10 int nums 5 int nums int...
1 1 C 程式基本結構
大綱目錄 include c 預處理器 預處理器是一些以 開頭的指令,指示編譯器在實際編譯之前所需完成的預處理。預處理指令是給編譯器看的,不是c 語句,所以它們不會以分號結尾。c 支援很多預處理指令,比如 include define if else line等。include指令,用於把頭檔案內容...
11 C 筆記 函式 方法
1 函式基本使用 函式的呼叫方法用c 主函式要在乙個class中,靜態的,無返回值 見示例using system class test ret console.readline 支援遞迴 2 函式的輸入輸出 1 值傳遞 正常同c 2 引用傳遞 ref 關鍵字 using system static...