第15章 物件導向程式設計 9

2021-09-30 09:47:16 字數 1005 閱讀 1136

15.4.3 複製控制和繼承

派生類也可以使用合成複製控制成員。合成操作對物件的基類部分連同派生部分的成員一起進行複製、賦值或撤銷,使用基類的複製建構函式、賦值操作符或析構函式對基類部分進行複製、賦值或撤銷。

只包含類型別或內建型別資料成員、不含指標的類一般可以使用合成操作,複製、賦值或撤銷這樣的成員不需要特殊控制。具有指標成員的類一般需要定義自己的複製控制來管理這些成員。

1. 定義派生類複製建構函式

如果派生類顯式定義自己的複製建構函式或賦值操作符,則該定義將完全覆蓋預設行為。被繼承類的複製建構函式和賦值操作符負責對基類成分以及類自己的成員進行複製或賦值。

#include "stdafx.h"

#include using namespace std;

class base

base(const base &b) };

class child:base

child(const child &c):value3(c.value3), base(c){}

};

2. 派生類賦值操作符

如果派生類定義了自己的賦值操作符,則該操作符必須對基類部分進行顯式賦值。

child &operator= (const child &c)

return *this;

}

賦值操作符必須防止自身賦值,假定左右運算元不同,則呼叫base類的賦值操作符給基類部分賦值。該操作符可以由類定義,也可以是合成賦值操作符,這沒什麼關係——我們可以直接呼叫它。基類操作符將釋放左運算元中基類部分的值,並賦以來自c的新值。該操作符執行完畢後,接著要做的是為派生類中的成員賦值。

3. 派生類析構函式

析構函式的工作與複製建構函式和賦值操作符不同:派生類析構函式不負責撤銷基類物件的成員。編譯器總是顯式呼叫派生類物件基類部分的析構函式。每個析構函式只負責清除自己的成員。

物件的撤銷順序與構造順序相反:首先執行派生類析構函式,然後按繼承層次依次向上呼叫各基類析構函式。

第15章 物件導向程式設計

派生類中的虛函式可以返回基類函式所返回型別的派生類的引用或指標。只有指定為虛函式的成員函式才能進行動態繫結。派生類可以進一步限制但不能放鬆對所繼承的成員的訪問。使用private或protected派生的類不繼承基類的介面,稱為實現繼承。使用class保留字定義的派生類預設具有private繼承,而...

第 15章 物件導向程式設計(一)

以quote基類和bulk quote派生類為例,記錄標頭檔案和cpp檔案的構成。目錄 基類和派生類的標頭檔案及cpp檔案結構 quote.h quote.cpp bulk quote.h bulk quote.cpp main.cpp ifndef quote h define quote h i...

第15章 物件導向程式設計 3

15.2.4 virtual與其他成員函式 c 中的函式呼叫預設不使用動態繫結。要出動動態繫結,必須滿足兩個條件 第一,只有指定為虛函式的成員函式才能進行動態繫結,成員函式預設為非虛函式,非虛函式不進行動態繫結 第二,必須通過基類型別的引用或指標進行函式呼叫。1.從派生類到基類的轉換 因為每個派生類...