C/C++繼承與派生

(1)派生類的訪問屬性

? ? ? ? ? ?1)public繼承:派生類中:可以訪問基類的public和protect變量,不可以訪問基類的private變量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 派生類外:可以訪問基類的public變量,不能訪問基類的private變量

? ? ? ? ? ? 2)protect繼承:派生類中:可以訪問基類的public和protect變量,不可以訪問基類的private變量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?派生類外:都不可以訪問

? ? ? ? ? ? 3)private繼承:派生類中:都不可以訪問

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?派生類外:都不可以訪問

(2)派生類的構造函數

? ? ? ? ? ? ? ? 派生類中包含所有基類的數據成員和派生類中新增的數據成員(包括其他類的對象(子對象)和普通數據成員)。

? ? ? ? ? 1)對于基類成員和子對象成員的初始化必須在成員初始化列表中進行,新增成員的初始化既可以在成員初始化列表中進行,也可以在構造函數體中進行。

? ? ? ? ? 2)派生類構造函數的初始化順序:基類的構造函數,子對象的構造函數,派生類構造函數體。

? ? ? ? ?3)當派生類中出現多個基類時,處于同一層次的各個基類的構造函數的調用順序取決于定義派生類時聲明的順序(自左向右),而與派生類構造函數的成員初始化列表給出的順序無關

? ? ? ? ?4)如果派生類的基類也是一個派生類,則每個派生類只需復雜其直接基類的構造,依次上溯。

? ? ? ? ?5)當派生類中有多個子對象時,各個子對象的構造函數的調用順序也取決于派生類宏定義的順序(自前往后),而與派生類構造函數的成員初始化列表給出的順序無關。

? ? ? ? ?6)派生類構造函數提供將參數傳遞給基類構造函數的途徑,以保證基類進行初始化時能夠獲得必要的順序,如果基類的構造函數中定義了一個或多個參數,派生類必須定義構造函數。

? ? ? ? ?7)如果基類定義了默認構造函數或根本沒有定義一個構造函數,在派生類構造函數的定義中可以省略對基類構造函數的調用。

? ? ? ? ?8)子對象的情況同7)基類。

? ? ? ? ?9)當所有的基類或子對象的構造函數都可以省略時,可以省略派生類構造函數的成員初始化列表。

? ? ? ? 10)如果所有基類和子對象都不需要參數,派生類也不需要參數時,派生類構造函數可以不定義。

(3)派生類的析構函數

? ? ? ? ? ? 在派生時,派生類不能繼承基類的析構函數,但是需要通過派生類的析構函數去調用基類的析構函數,析構函數的調用順序與構造函數的調用順序正好相反,首先調用派生類的析構函數,然后調用成員類對象的析構函數,最后調用基類的析構函數。

? ? ? ? ? ? 析構函數調用場景:

? ? ? ? ? ? ? ? ? ? ? 1)對象生命周期結束被銷毀時(一般類成員的指針變量與引用都不自動調用析構函數)。

? ? ? ? ? ? ? ? ? ? ? 2)delete指向對象的指針時,或delete指向對象的基類類型指針,而其基類虛構函數是虛函數時。

? ? ? ? ? ? ? ? ? ? ? 3)對象i是對象o的成員,o的析構函數被調用時,對象i的析構函數也被調用。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382290.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C/C++之string類小結

(1)C字符串和C字符串的轉換 C提供了三種方法可以將C字符串轉化為C字符串,分別是data(),c_str(),copy()成員函數來實現。 1)data()是以字符數組的形式返回字符串內容,但并不添加‘\0’; 2)c_str(…

2.兩數相加 golang

測試用例1500多個,考慮的情況非常多 測試用例 [0] [1] [2] [3,4,2] [5,0] [2] [1] [0] [9,8] [0] [4,6,5] [5,0] [1] [9] [0] [0,9] [2] [8,0,7] [0,1] [3] [0,1]func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {result : &List…

C/C++之vector的內存管理和效率

(1)vector容器支持隨機訪問,其內部是通過動態數組實現的; (2)當vector執行insert或者push_back時,如果此時動態數組的內存不夠用,則會重新分配當前大小的1.5~2倍的新內存區,把原來數組的內容復制過去; (3)為…

匯頂軟件開發初面總結20180921

博客參考:C中的多態和內部實現:https://www.cnblogs.com/qiaoconglovelife/p/5128523.html 虛函數表存放的地址:https://blog.csdn.net/jiary5201314/article/details/52627630 為什么STL和linux都采用紅黑樹作為平衡樹的實現:htt…

LeetCode 21. 合并兩個有序鏈表 golang

遞歸 func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {if nil l1 {return l2}if nil l2 {return l1}if l1.Val < l2.Val {l1.Next mergeTwoLists(l1.Next, l2)return l1} else {l2.Next mergeTwoLists(l1, l2.Next)return l2} }Me(存在問題)非遞歸版本實現…

深信服C/C++技術一面二面20180924

技術一面&#xff1a;主要是一些關于數據結構和C/C相關的內容 1)鏈表和數組的相同點和不同點&#xff1b; 2&#xff09;了解靜態鏈表嗎&#xff1f;怎么用數組實現靜態鏈表&#xff1f; 3&#xff09;使用庫函數strcpy應該注意的問題有哪些&#xff1f; 4&#xff09;鏈表…

83. 刪除排序鏈表中的重復元素 golang

83. 刪除排序鏈表中的重復元素 golang Me func deleteDuplicates(head *ListNode) *ListNode {if head nil || head.Next nil {return head}result : headfor head ! nil && head.Next ! nil {for head.Val head.Next.Val {head.Next head.Next.Nextif head.Next…

《C++ Primer第五版》習題答案

博客轉載&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53786215 第一章&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53200001 第二章&#xff1a; 1~10題&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53200773 11~…

《C++ Primer第五版》第一章-------IO機制和注釋縮進

C Primer第一章的內容相對來說比較基礎&#xff0c;主要是對C中程序編譯的流程、C中的IO機制&#xff0c;for和while循環的介紹、類的構成和注釋方法及縮進方法做了簡要的介紹&#xff0c;本次博客主要從C中的IO機制和注釋縮進等方面做一個總結記錄&#xff0c;如果在總結過程中…

19.刪除鏈表的倒數第N個節點 golang

官解 一遍寫出來有難度。 [1,2] 2 [2][1,2]1 [1]func removeNthFromEnd(head *ListNode, n int) *ListNode {if n < 0 || head nil {return head}fast : headfor i : 1; i < n && fast ! nil; i{fast fast.Next}if fast nil {return head.Next}slow : headfor…

《C++ Primer 第五版》第二章(1-4小節)------基本內置類型,初始化和賦值及聲明和定義,指針和引用,const和constexpr

C Primer第二章的內容主要介紹了變量和基礎類型&#xff0c;包括C語言定義的基礎內置類型、變量的定義及聲明、符合類型如指針及引用的介紹和const及常量表達式constexpr的介紹&#xff0c;本次博客也從這四個方面進行系統的介紹&#xff0c;如果有不足之處&#xff0c;還望其他…

455. 分發餅干 golang

455. 分發餅干 Me func findContentChildren(g []int, s []int) int {if len(s) 0 {return 0}sort.Ints(g)sort.Ints(s)var count, i, j int 0, 0, 0for { if g[i] < s[j] {i, j, count i1, j1, count1} else {j}if i > len(g) || j > len(s) {return count}}re…

《C++ Primer 第五版》第二章(第5小節)——using和typedef,auto和decltype總結

1.using和typedef&#xff08;作用&#xff1a;定義類型別名&#xff09; 1)typedef和using都可以用來定義一個類型別名&#xff0c;二者在類型別名上定義沒有區別。只是需要注意的是類型和類型別名的順序&#xff0c;使用typedef定義類型別名的結構為 typedef 類型 類型別名&a…

204. 計數質數 golang

一次嘗試&#xff0c;如何擊敗100%用戶&#xff08;用時&#xff0c;內存&#xff09; func countPrimes(n int) int {if n 499979 {return 41537}if n 11 {return 4}if n 12 {return 5}if n 13 {return 5}if n 14 {return 6}if n 15 {return 6}if n 10 {return 4}if n …

leetcode內存消耗

leetcode內存消耗最是多少 執行用時 :0 ms, 在所有 Go 提交中擊敗了100.00%的用戶 內存消耗 :1.9 MB, 在所有 Go 提交中擊敗了94.81%的用戶測試鏈接 Test

《C++ Primer 第五版》(第2.5節,第3.1-3.4節) ——采用預處理功能編寫頭文件,string初始化和字符操作,vector初始化和迭代器

1.采用預處理功能編寫頭文件 在頭文件定義(頭文件中的內容是只能被定義一次的實體)過程中&#xff0c;為了防止頭文件重復包含的情況&#xff0c;采用預處理器的一個頭文件保護符功能,格式為&#xff1a;{ #ifndef 預處理變量(通常大寫) #define 預處理變量 #end…

《C++ Primer 第五版》(第3.5-3.6節) ——C++中的內置數組類型,string對象和C風格字符串

1.C中的內置數組類型 C中的數組是內置數據類型&#xff0c;但不是基礎數據類型而是構造數據類型&#xff0c;是有限個相同數據、占據著連續物理存儲空間的有序集合。而內置數據類型定義的下標運算符可以處理負值運算(只要在數組范圍之內)&#xff0c;這和vector及string的下標運…

793. 階乘函數后K個零 golang

Me(AC 33 / 44 個通過測試用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio單選框回顯

話不多說&#xff0c;效果圖如下&#xff1a; 具體代碼如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

172. 階乘后的零 golang

官解 一般很難想到這個方向&#xff0c;有點類似數學歸納法&#xff1f; func trailingZeroes(n int) int {if n 0 {return 0}return trailingZeroes(n / 5) n / 5 }