每日一言
????????你的價值,由你自己定義,無需他人評判。
?
C++的繼承
直接上案例
繼承是什么意思呢,就是我本來這個類我叫他基類、我希望創建我的下一個類有我這之前的類的屬性和方法,那么我如果不用繼承的話,就需要多寫很多一樣的代碼,那么就是不好,不性感,那么這邊有個叫做繼承的概念,可以讓我們新創建的類去繼承我們的之前的類,而且現在新創建的類不寫之前的類的屬性和方法,我們也可以進行使用,當做自己寫了這些屬性和方法,那么我們也可以添加新的屬性和方法,這個就叫做繼承
我們稱之前的那個被繼承的類叫做父類、基類,新的那個類叫做子類、派生類
我們這邊用了一個案例 ?一個叫做手機類 一個叫做蘋果這個類
那么很明顯手機類是父類,蘋果類是子類,那么我們的手機類中的屬性,我們的子類也可以用,怎么繼承呢??用什么符號?我們寫子類的時候這樣寫
我們一般寫寫類不是就是這樣寫的嗎 class phone{}這就結束了。但是我們是要作為子類去繼承父類的所以我們要加上 :
這個public是什么意思呢,就是說我們的子類要是想用父類的屬性或者方法,即使父類那邊寫了public都不行,也會變成private ,所以我們就需要自己加上public,這樣我們就可以隨心所欲調用父類的屬性和方法了,
像我們main函數里面就是子類調用的父類的屬性name ?,但是我們子類并沒有寫這個屬性,所以這個就是繼承的好處,不僅僅是省去了代碼,提高了代碼的復用,還有很多其他的好處在未來我們玩更大的項目的時候就可以體會的到了
分文件優化繼承
這個是什么操作呢?是不是和我們在c51的時候之前學的分文件優化代碼很像,確實很像啊,就是為了不讓我們的代碼那么多,又臭又長,那么我們要進行分文件處理,就是本來300行的代碼,什么鬼都有,類的聲明和實現也在,什么都有,現在我將它們單獨分在一個文件里面,這樣不就好了嗎,這個就是分文件優化代碼的意義。
那么開始吧!!!
事先說好哈我們要繼承父類嘛,所以我提前用以下的方法創建了一個類叫做Animal
步驟1,右鍵項目
選擇C++class
輸入Dog(子類名)
這個Base class就是繼承的意思,然后我們目前的話可以自己寫上去如下圖的Animal
創建文件后會自動跳到dog.h文件發現不認識Animal,因為要包含animal.h這個頭文件,我們這個創建的Dog類的話,會生成dog.cpp和dog.h文件
添加后,我們也把函數的聲明寫出來,那么此時我們不是需要將函數的實現寫出來嗎,哪里寫在dog.cpp也就是該類的cpp文件里面寫,這邊有個快捷的方法,就是右鍵我們的函數,就是右鍵我們寫好的 dogShout()這個函數,里面有個Refactor(重構)的里面有個在dog.cpp中添加定義
那么就來到了我這張圖
我們將函數進行實現
實現完之后我們來到mian.c文件,這邊就是我們的主戰場了,和我們之前的是一個意思,我們創建Dog的實例化對象,會發現不認識Dog,那么我們就知道需要添加dog.h頭文件了
然后我們就實現了
這個就是我們的分文件優化繼承,
權限對繼承的影響
主要是記住這張圖權限對繼承的影響圖,
我拋出代碼我進行講解
這個就是我進行測試的代碼了,什么意思呢
- 我在基類中創建了public、protected、private屬性的變量
好的現在我創建了一個名為TestClass的子類去使用private屬性去繼承父類,
那么此時我們要知道,我們使用任何屬性繼承父類后,父類中的屬性都有可能會被降級,降級什么意思呢就是父類的public屬性的成員變量,會變成protected屬性的成員變量,或者是其他的降級
因此我們就要進行判斷權限的變化
好的,我們這邊使用private屬性去繼承父類,那么父類中的public屬性的變量會變成private ?protected屬性的變量會變成private ,然后private屬性的話本來就不能被繼承,要說降級的話可以是說降級到不可訪問
那么我們就可以根據權限變完后的的權限等級我們去看這張表,看一下有那些數據我們可以如何去調用,比如有些只能在類內部被調用,有些類外部可以被調用,等等
我們結合案例,我們這邊,進行private繼承后會發現,父類的public權限的變量和protected權限的變量都降級成了private,那么我們根據上面那張表可以知道,此時只有類內部可以調用private權限的變量,所以我們這個price可以被調用,不會報錯,當然protectedData=10;這個protect權限的變量也不會報錯,也是可以的調用的
看我們也在類的外部創建了一個對象來進行調用price,那么肯定是不行的,因為我們可以根據那張表來看,類外部是不允許調用protected權限的變量的
其實其他的也都是這樣子來判斷,主要就是結合我們的這兩張表來進行判斷,要熟記于心噢,這邊我只用一個來解釋,其他兩個子類的調用的操作,得出報錯還是不報錯,也是這樣去了解的
總結來說:子類用不同的權限去繼承父類,那么父類中的權限屬性變量 會發生降級的影響,也就是權限會變低,我們俗稱權限的高低由public->protected->private依次降級。
那么我們根據變化后的權限要知道,我們在不同的區域塊(類內部、同一個類的對象、子類、類外部),對這些權限的變量的調用許可,做到這一點就行了