Qt圖形界面編程入門(7)

派生類的構造函數和析構函數

基類的構造函數和析構函數不能被繼承。

在派生類中,如果派生類新增的成員進行初始化,就必須加入新的構造函數。與此同時,對所有從基類繼承下來的成員的初始化工作還是由基類的構造函數完成,必須在派生類中對基類的構造函數所需要的參數進行設置。同樣,對派生類對象的掃尾,清理工作也需要加入析構函數。

首先看下面例子:

class A   //默認構造函數為空
{
public:int x;
};
class B:public A   //默認構造函數為空
{
public:int y;
};

當創建B類對象b1后,對象b1可以訪問下x,y這兩個成員。那么是否可以認為b1實際上是下面C類的對象呢?

class C
{
public:int x,y;
};

若利用C類創建對象c1,從成員訪問權限上看,對象b1和c1沒有差別。但是b1的x和c1的x不同,它繼承于基類。由于派生類不能繼承父類的構造函數和析構函數,因此對象b1的x占據的內存區域只能通過基類的構造函數初始化。同樣,銷毀對象時,b1的x占據的內存也只能由基類的析構函數進行清理。而對象c1的x是由C類構造函數初始化,由C類析構函數進行清理工作的。因此b1和c1僅僅是表面相似而已。由于派生類構造過程涉及基類構造函數的調用,因此其構造函數比較復雜。

1、構造函數

派生類構造函數的一般形式為

派生類::派生類(參數總表)::基類1(參數表1),……,基類n(參數表n),內嵌對象1(對象參數表1),……,內嵌對象m(對象參數表m){

派生類新增加成員的初始化;

}

這個聲明形式很復雜,應該注意以下幾點:

①對于基類繼承的數據成員,應采用基類構造函數初始化,并且應放在派生類構造函數的初始化列表中,不應放到構造函數體中初始化。

②參數總表包括全部基類和全部內嵌對象的所有參數,同時也包含派生類新增數據成員的初始化參數。最后一個冒號后面的基類和內嵌對象的參數全部取自前面的參數總部。

③當派生類使用基類無參數的默認構造函數初始化繼承的數據成員時,初始化列表中就不存在“基類(參數表)”的初始化部分。

④當派生類中無內嵌對象或者內嵌對象使用無參數的默認構造函數時,初始化列表中就不存在“內嵌對象(參數表)”的初始化列表部分。

⑤當基類有待參數的構造函數時,派生類應當定義構造函數,提供一個將參數傳遞給基類的構造函數的途徑

?

派生類構造函數的執行次序為:執行基類構造函數——執行內嵌對象的構造函數——執行派生類構造函數體的內容

派生類析構函數的執行次序為:執行派生類析構函數——執行內嵌對象的析構函數——執行基類析構函數

?

派生類構造函數和析構函數的執行

代碼分析:

從輸出結果可以清楚地看出,構造函數執行順序為先祖先(Person 張三),后客人(Person 王五),最后自己(Employee),這里Wang是Person類只的一個對象,被派生類Emoloyee所有。

同時,從上面的輸出結果中可以看出,析構函數的執行次序恰好與構造函數相反,先執行自身(Employee)的析構函數,而后是客人(Person 王五),最后祖先(Person 張三)

?

?

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

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

相關文章

Python二級筆記(11)

知識點: 1,在棧中,棧頂指針top動態反映了棧中元素的變化情況,在循環隊列中,隊尾指針和隊頭指針的動態變化決定隊列的長度,在鏈式存儲結構中.無論是循環鏈表還是線性鏈表,插入和刪除元素時&…

Python二級筆記(12)

知識點: 1,機器周期的同步標準是指CPU訪問存儲器一次所需要的時間 2,int()函數可以將整數字符串轉換成整數,也可以將浮點數轉化為整數,但是不能將其他字符串轉換成整數。 3,當max(函數的參數是字典時&am…

Python二級筆記(13)

知識點: 1,機器數,不管是正數還是負數,其補碼的符號位取反即是偏移碼。 2,循環隊列是隊列的一種順序存儲結構 3, break語句會跳出break所在的最內層循環; try中 的語句出錯時會被捕獲異常,執行except下的…

Python二級筆記(14)

知識點: 1,在循環鏈表中,只要指出表中任何一個結點的位置,就可以從它出發不重復地訪問到表中其他所有的結點。 單向鏈表只有從頭指針開始,沿各結點的指針掃描鏈表中的所有結點。 雙向鏈表從任何一一個結點位置出發就可以訪問到表中其他所有結…

Python二級筆記(15)

知識點: 1,數據流圖(DFD)的作用是支持系統功能建模 2,一個數據庫可以有多個外模型(也稱子模式或用戶模型),但概念模型和內模式(物理模式)只能有一個。 3&a…

Linux基礎(管道符、重定向、轉義字符與環境變量)

1、輸入輸出重定向 簡而言之,輸入重定向是指把文件導入到命令中,而輸出重定向則是指把原本要輸出到屏幕的數據信息寫入到指定文件中。 標準輸入重定向(STDIN,文件描述符為0):默認從鍵盤輸入,也…

軟件工程(數據流圖例題詳解)

假設一家工廠的采購部每天需要一張訂貨報表,報表按零件編號排序,表中列出所有需要再次訂貨的零件。對于每個需要再次訂貨的零件應該列出下述的數據:零件編號,零件名稱,訂貨數量,目前價格,主要供…

軟件工程(數據流圖的命名、用途和自動化邊界)

數據流圖中每個成分的命名是否恰當,直接影響數據流圖的可理解性。因此,給這些成分起名字時應該仔細推敲。 命名 1.為數據流(或數據存儲)命名 (1)名字應代表整個數據流(或數據存儲)的內容,而不是僅僅反映它的某些成分。 (2)不要使用空洞的…

軟件工程(數據字典)

數據字典 數據字典是關于數據的信息的集合,也就是對數據流圖中包含的所有元素的定義的集合。 任何字典最主要的用這都是供人查閱對不了解的條目的解釋,數據字典的作用也正是在軟件分析和設計的過程中給人提供關于數據的描述信息。 數據流圖和數據字典共…

Qt圖形界面編程入門(Qt的歷史、Qt安裝資源鏈接、Qt Creator簡介)

Qt的歷史淵源 Qt是1991年由挪威的奇趣科技(Trolltech)公司開發的跨平臺C圖形用戶界面(GUI)用程序開發框架,2008年,奇趣科技公司被諾基亞公可收購,Qt也因此成為諾基亞公司旗下的編程語言工具,曾稱霸一時的Symbian手機操作系統就是…

Qt圖形界面編程入門(創建一個簡單的程序)

1,手工編碼方式 利用手工編碼方式建立“Hello Qt!”程序 第一步: 得到界面 2,無UI的向導方式 從圖中,我們發現向導為窗口程序提供了3個基類,分別外QMainWindow、QWidget、QDialog,3個基類的區…

Linux基礎(Vim編輯器與Shell命令腳本)

1、Vim文本編輯器 Vim文本編輯器有三種模式 命令模型:控制光標移動,可對文本進行復制、粘貼、刪除和查找得等工作。 輸入模式:正常的文本錄入 末行模式:保存或退出文檔,以及設置編輯環境。 在每次運行Vim編輯器時&…

Python二級筆記(16)

知識點: 1,進程調度僅負責對CPU進行分配 2,帶鏈的隊列是采用鏈式存儲結構表示的隊列。鏈式存儲的存儲單元是不連續的,因為是不連續的存儲空間,所以指針將不會有規律的地連續變化。當front rear NULL時,…

Python二級筆記(17)

操作題: 1,接收用戶輸入的一個浮點數,輸出這個浮點數的小數部分各字符的和,以10為寬度,靠右顯示,,采用星號*填充。 代碼: s input("請輸入一個小數:") s s[::1] cs () for c in…

Python二級筆記(18,19合集操作篇)

操作題: 1,鍵盤輸入正整數n,按要求把n輸出到屏幕,格式要求:寬度為25個字符,等號字符()填充,右對齊,帶千位分隔符。如果輸入正整數超過25位,則按照真實長度輸…

Qt圖形界面編程入門(信號和槽通信機制)

信號和槽機制是Qt的核心機制,可以讓編程人員將互不相關的對象綁定在一起,實現對象之間的通信。 聲明了信號的對象,當其狀態改變時,信號就由該對象發送出去,而且該對象只負責發送信號,它不知道另一端是誰在…

Python二級筆記(18,19合集知識點篇)

知識點: 1,軟件測試的目的是發現程序中的錯誤。調試是作為成功測試的后過而出現的步驟,也就是,調試是在測試發現錯誤之后排除錯誤的過程。軟件調試的任務是診斷和改成程序中的錯誤。 2,深度等于控制的層數 3&#x…

軟件工程(成本/效益分析)

一般說來,人們投資于一項事業的目的是為了在將來得到更大的好處。開發一個軟件系統也是一種投資,期望將來獲得更大的經濟效益,經濟效益通常表現為減少運行費用或增加收入。但是,投資開發新系統往往需要冒一定的風險。系統的開發成…

Linux基礎(用戶身份和文件權限)

用戶身份與能力 Linux是一個多用戶、多任務的操作系統,具有很好的穩定性與安全性,在幕后保障Linux系統安全則是一系列復雜的配置工作。 Linux系統的管理員之所以是root,并不是因為它的名字叫root,而是因為該用戶的身份號碼即UID…

Centos 8 RHEL 8 破解root密碼

https://blog.csdn.net/u014042047/article/details/107309890/