在C++中子类继承和调用父类的构造函数方法
構(gòu)造方法用來初始化類的對(duì)象,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變量和成員方法,但不繼承父類的構(gòu)造方法)。因此,在創(chuàng)建子類對(duì)象時(shí),為了初始化從父類繼承來的數(shù)據(jù)成員,系統(tǒng)需要調(diào)用其父類的構(gòu)造方法。
如果沒有顯式的構(gòu)造函數(shù),編譯器會(huì)給一個(gè)默認(rèn)的構(gòu)造函數(shù),并且該默認(rèn)的構(gòu)造函數(shù)僅僅在沒有顯式地聲明構(gòu)造函數(shù)情況下創(chuàng)建。
構(gòu)造原則如下:
????1.?如果子類沒有定義構(gòu)造方法,則調(diào)用父類的無參數(shù)的構(gòu)造方法。
????2.?如果子類定義了構(gòu)造方法,不論是無參數(shù)還是帶參數(shù),在創(chuàng)建子類的對(duì)象的時(shí)候,首先執(zhí)行父類無參數(shù)的構(gòu)造方法,然后執(zhí)行自己的構(gòu)造方法。
????3.?在創(chuàng)建子類對(duì)象時(shí)候,如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù),則會(huì)調(diào)用父類的默認(rèn)無參構(gòu)造函數(shù)。
????4.?在創(chuàng)建子類對(duì)象時(shí)候,如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù)且父類自己提供了無參構(gòu)造函數(shù),則會(huì)調(diào)用父類自己的無參構(gòu)造函數(shù)。
????5.?在創(chuàng)建子類對(duì)象時(shí)候,如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù)且父類只定義了自己的有參構(gòu)造函數(shù),則會(huì)出錯(cuò)(如果父類只有有參數(shù)的構(gòu)造方法,則子類必須顯示調(diào)用此帶參構(gòu)造方法)。
????6.?如果子類調(diào)用父類帶參數(shù)的構(gòu)造方法,需要用初始化父類成員對(duì)象的方式,比如:
? ? ?
#include <iostream.h>class animal{public:animal(int height, int weight){cout<<"animal construct"<<endl;}…};class fish:public animal{public:fish():animal(400,300){cout<<"fish construct"<<endl;}…};void main(){fish fh;}在fish類的構(gòu)造函數(shù)后,加一個(gè)冒號(hào)(:),然后加上父類的帶參數(shù)的構(gòu)造函數(shù)。這樣,在子類的構(gòu)造函數(shù)被調(diào)用時(shí),系統(tǒng)就會(huì)去調(diào)用父類的帶參數(shù)的構(gòu)造函數(shù)去構(gòu)造對(duì)象。
例外像MFC常見的CDialog繼承可以看到這種例子..
頭文件中
// DrugDlg.cpp : 實(shí)現(xiàn)文件 //#include "stdafx.h" #include "Medical.h" #include "DrugDlg.h" #include "afxdialogex.h"// CDrugDlg 對(duì)話框IMPLEMENT_DYNAMIC(CDrugDlg, CDialog)CDrugDlg::CDrugDlg(CWnd* pParent /*=NULL*/):CDialogEx(CDrugDlg::IDD, pParent) {}CDrugDlg::~CDrugDlg() { }
這種初始化方式,還常用來對(duì)類中的常量(const)成員進(jìn)行初始化,如下面的代碼所示:
class point{public:point():x(0),y(0)private:const int x;const int y;};當(dāng)然,類中普通的成員變量也可以采取此種方式進(jìn)行初始化,然而,這就沒有必要了..
總結(jié)
以上是生活随笔為你收集整理的在C++中子类继承和调用父类的构造函数方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1%超级富豪拿走全球三分之二新财富:穷人
- 下一篇: 推特被解雇员工要求更多遣散费,但因签署过