繼承與組合的選擇

2021-05-22 20:22:37 字數 2178 閱讀 2765

1)

繼承與組合是重用物件**的機制。

2)

關於父子類的初始化,請參考初始化列表

不能繼承的函式

l建構函式和析構函式

建構函式與析構函式只負責它所在的那一層上的構建與釋放。子類仍然需要自己的建構函式,也需要手動呼叫父類的自定義建構函式。

loperator=

理由同上。

4)

new/delete是可以被繼承的

當在父類定義了

new/delete

時,如果子類沒有過載

new/delete

,則用父類的。

5)

static函式也是可以繼承的,但其不能是virtual

的。

public a};

class b:public a ;

b::func(); //

可以

更多請參考

組合的需求

l當需要存在的類功能時,可選擇組合或繼承。當不想用存在類的介面,而完全使用新類定義的介面時,用組合。

l當不需要從子類到父類的轉換時,考慮用組合。

比如,你只是用

vector

儲存一些資料時,就不需要這種轉換。

7)

private/protected繼承的需求

lprivate

繼承是實現繼承,在一般情況下,用組合可滿足需求。但是,當子類需要父類的部分功能時,可考慮用私有繼承

class a;

class b: private a //

不寫private

預設就是私有繼承;

l私有繼承時,父子類指標不能進行轉換,因為它們沒有關係。

a* pa = new b;

lprotected

繼承的出現只是為了語言的完備性

8)

繼承的需求

多型

請參考

父子類之間的轉換

l向上型別轉換

從子類到父類的轉換是安全的,因為它僅僅是失去一些子類的功能

l向下型別轉換

相反,從父類到子類的轉換是非安全的,因為它增加了一些功能

從以上可反映出生活的哲理:失去的比得到的更加容易。

組合與繼承之間的選擇

下面來看乙個組合的案例 public class engine public void rev public void stop public class wheel public class window public void rolldown public class door public ...

菱形繼承和組合與繼承的選擇。

class person class student public person class teacher public person class assistant public person,public student void test1 由上述的 中可以看出,在給a.name初始化的時候...

組合與繼承改選擇誰?

在物件導向程式設計中,有一條非常經典的設計原則,那就是 組合優於繼承,多用組合少用繼承。為什麼不推薦使用繼承?組合相比繼承有哪些優勢?如何判斷該用組合還是繼承?繼承是物件導向的四大特性之一,用來表示類之間的 is a 關係,可以解決 復用的問題。雖然繼承有諸多作用,但繼承層次過深 過複雜,也會影響到...