11 C 類複製控制

2021-04-14 15:39:55 字數 1748 閱讀 7879

.類複製控制

(前言,定義,基類與派生類,設計指導)

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...