學習筆記十 物件導向程式設計

2021-07-06 05:34:57 字數 2421 閱讀 7765

1.一般可以使用派生型別物件對基類物件進行賦值和初始化。但編譯器不會自動將派生型別物件轉換為基類型別物件。對物件進行初始化和賦值可以自動轉換引用和指標,之間的區別是微妙的,必須好好理解。(但是我理解不了,。。。。敘述見primer中文版第四版488頁)

2.派生類只能初始化直接基類。

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

4.基類析構函式是三法則(複製操作符/賦值操作符/析構函式常一起出現)的乙個重要例外。如果基類為了將析構函式設為虛函式而具有空析構函式,那麼,類具有析構函式並不表示也需要賦值操作符或複製建構函式。

5.即使析構函式沒有要做,繼承層次的根類也應該定義乙個虛析構函式。

6.派生類中定義的函式也不過載基類中定義的成員。如果派生類想通過自身型別使用所有的過載版本,則派生類必須要麼重定義所有過載版本,要麼乙個也不重定義。不過這麼做十分令人厭煩。為了解決這個問題,c++提供一種方式:使得派生類不用重定義所繼承的每乙個基類版本,只要為過載成員提供using宣告,表明該版本只採用基類版本。

7.將函式定義為純虛函式,是為後代型別提供可以覆蓋的介面。

8.含有(或繼承)乙個或多個純虛函式的類是抽象基類。處理作為抽象基類的派生類的物件的組成部分,不能建立抽象型別的物件。(2點理解:(1)抽象基類一般作為介面;(2)繼承乙個或多個純虛函式指的是其基類中含有純虛函式,但在其本身類中沒有對它重定義)

9.在我們使用容器,且容器的元素是類型別時,為了儲存繼承關係,我們不能使用物件(因為物件不是多型的,——將派生類物件複製到基類物件時,派生類物件的派生部分會被切掉)。唯一可行的選擇是使用物件的指標作為容器元素(至於為什麼不能採用引用,見9.1.2,引用不能作為容器元素)但採用指標的代價就是使用者需要面對管理物件和指標的問題——這裡可以採用控制代碼(包含計數指標的類)來進行物件和指標的管理。(從這一段我們明確了乙個問題:什麼時候容器的元素需要採用物件的指標:那就是要儲存繼承關係時如果不需要考慮繼承的話,可以直接將類物件作為容器元素

——頗具諷刺意味:不能採用物件支援物件導向程式設計,相反,必須使用指標或引用。

8.設計程式的乙個良好習慣是首先將程式所涉及的操作列出來。明確需要提供的操作有助於建立需要的資料結構和實現這些行為。(明確資料結構和操作)

9.(1)抽象類不能例項化;(2)抽象方法是必須被子類重寫的方法;(3)如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其他一般方法。

10.抽象類通常代表乙個抽象概念,它提供乙個繼承的出發點,當設計乙個新的抽象類時,一定是用來繼承的,所以,在乙個以繼承關係形成的等級結構裡面,樹葉節點應當是具體類,而樹枝節點應當是抽象類。

11.介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦類實現了介面,類就可以支援介面所知道的所有屬性和成員。宣告介面在語法上和宣告抽象類完全相同,但不允許提供介面中任何成員的執行方式。實現介面的類必須要實現介面中的所有方法和屬性。乙個類可以支援多個介面,多個類也可以支援相同的介面。

12.第一.類是對物件的抽象;抽象類是對類的抽象;介面是對行為的抽象。第二.如果行為跨越不同類的物件,可使用介面:對於一些相似的類物件,用繼承抽象類。第三.從設計角度講,抽象類是從子類中發現了公共的東西,泛化出父類,而介面是根本不知道子類的存在,方法如何實現還不確認,預先定義。

13.抽象類往往是通過重構得來的,這體現了敏捷開發的思想,通過重構改善既有**的設計

14.一般可以這麼理解:抽象類是自底而上抽象出來的,而介面則是自頂而下設計出來的。

15.裝箱就是將值型別打包到object引用型別的乙個例項中。拆箱就是指從物件中提取值型別。相對簡單的賦值而言,裝箱和拆箱過程需要進行大量的計算。對值型別進行裝箱時,必須分配並構造乙個全新的物件。其次,拆箱所需的強制轉換也需要進行大量的計算。解決辦法:泛型。

16.泛型是指具有佔位符(型別引數)的類、結構、介面和方法,這些佔位符是類、結構、介面和方法所儲存或使用的乙個或多個型別的佔位符。泛型集合類可以將型別引數用作它所儲存的物件的型別的佔位符;型別引數作為其字段的型別和其方法的引數型別出現。

17.通常情況下,都建議使用泛型集合,因為這樣可以獲得型別安全的直接優點而不需要從基集合型別派生並實現型別特定的成員。此外,如果集合元素為值型別,泛型集合型別的效能往往優於對應非泛型集合型別(並且優於從非泛型基集合型別派生的型別),因為使用泛型時不必對元素進行裝箱。

18.物件導向的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。

學習筆記十 物件導向程式設計(五)

正確的道路是這樣 吸取你的前輩所做的一切,然後再往前走。本講內容 抽象類 初始化塊 一 抽象類 物件導向中,所有的物件都是某乙個類的例項,但是並不是每個類都可以例項化成乙個物件。如果乙個類中沒有足夠的資訊來描繪乙個具體的物件,那麼這個類就不能被例項化,我們稱之為抽象類。抽象類用來描述一系列看起來不同...

C 程式設計(十) 物件導向設計

抽象是形成概念的必要手段,它是從許多事物中捨棄個別的 非本質的特徵,抽取共同及本質性的特徵的過程。抽象是面對物件方法中使用最為廣泛的原則。類是物件的抽象 資料成員是事物靜態特徵的抽象 成員函式是事物動態特徵的抽象。在軟體開發領域,早在物件導向方法出現之前就已經開始運用抽象的原則,主要是過程抽象和資料...

二十 物件導向 property使用

一.property使用 乙個靜態屬性property本質就是實現了get,set,delete三種方法 class foo property defaaa self print get的時候執行我啊 aaa.setter defaaa self,value print value,print se...