關(guān)于繼承與派生的小結(jié)-創(chuàng)新互聯(lián)

大家學(xué)了C++之后都知道C++是一種面向?qū)ο蟮恼Z言,因此,面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征也是C++的主要特點(diǎn),具體如下:

姚安網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,姚安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為姚安數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的姚安做網(wǎng)站的公司定做!

 1.封裝性:所謂封裝性就是將一組數(shù)據(jù)與這組數(shù)據(jù)有關(guān)的操作集合組裝在一起,形成一個(gè)能動(dòng)的實(shí)體,也就是對(duì)象。C++中通過建立類這個(gè)數(shù)據(jù)類型來支持封裝性。

 2.繼承性:繼承性是指一個(gè)類具有另一個(gè)類的屬性和行為。這個(gè)類既具有另一個(gè)類的全部特征,又具有自身的獨(dú)有特征。C++中將其稱為派生類(或子類),而將其所繼承的類稱為基類(或父類)。

 3.多態(tài)性:多態(tài)性是指不同的對(duì)象調(diào)用相同名稱的函數(shù),并可導(dǎo)致完全不同的行為。C++中的多態(tài)性通過使用函數(shù)重載、模板和虛函數(shù)等概念來實(shí)現(xiàn)。

 通過以上簡單的介紹,相信大家對(duì)C++的三大特性也有了簡單的了解,下面著重介紹一下關(guān)于繼承的一些小結(jié)。

 (1)繼承分為單繼承、多繼承和菱形繼承:看下面的圖大家會(huì)一目了然的。

  關(guān)于繼承與派生的小結(jié)

關(guān)于繼承與派生的小結(jié)

菱形繼承:

class B
{
public:
	int data1;
};

class B1: public B
{
public:
	int data2;
};

class B2: public B
{
public:
	int data3;
};

class D:public B1, public B2
{
public:
	int data4;
};

有上述代碼分析可知:B1和B2都繼承了B,所以D中就有兩份B。這樣造成了main()函數(shù)在調(diào)用時(shí)不知道該調(diào)用哪一個(gè)B,即造成了二義性。同時(shí)也造成了數(shù)據(jù)冗余。如何解決這個(gè)問題呢?下面引入了虛繼承。

(2)虛繼承:

定義格式:

class 派生類名:virtual [繼承方式] 基類名

class B
{
public:
	int data1;
};

class B1: virtual public B
{
public:
	int data2;
};

class B2: virtual public B
{
public:
	int data3;
};

class D:public B1, public B2
{
public:
	int data4;
};

通過在繼承時(shí)加上virtual構(gòu)成虛基類解決了二義性和數(shù)據(jù)冗余問題。

(3)繼承的定義格式:

 class 派生類名:[繼承方式] 基類名

 {

  派生類新增加的成員

 };

 繼承方式:a.公有繼承(public)

    b.保護(hù)繼承 (protected)

    c.私有繼承 (private)

注意:如果沒有指定派生方式,默認(rèn)為私有繼承。

下面通過簡單的例子來建立派生類:

class Base//基類
{
public:
Base()
{
cout << "Base()  " << this << endl;
}
    ~Base()
{
cout << "~Base()" << endl;
}
private:
int _pri;
protected:
int _pro;
public:
int _pub;
};
class Derive : public Base//派生類以公有繼承的方式繼承基類
{
public:
Derive()
{
cout << "Derive()  " << this << endl;
}
~Derive()
{
cout << "~Derive()" << endl;
}
private:
int _dPri;
protected:
int _dPro;
public:
int _dPub;
};
int main()
{
cout<<sizeof(Base)<<endl;//12
cout<<sizeof(Derive)<<endl;//24 派生類的sizeof()大小等于(基類大小+派生類大?。?     return 0;
}

(4)繼承關(guān)系&訪問限定符

看下圖可以直觀的了解訪問限定符與繼承關(guān)系:

關(guān)于繼承與派生的小結(jié)

關(guān)于繼承與派生的小結(jié)

總結(jié):

a.為了記憶方便,可以簡單的記作:基類中私有成員不可訪問,公有繼承不變,私有繼承私有,保護(hù)繼承保護(hù)。

b.派生類的對(duì)象只可訪問公有繼承方式下基類中的公有成員。派生類的派生類可以訪問公有繼承方式和保護(hù)繼承方式下基類中的公有成員和保護(hù)成員。

c.在實(shí)際運(yùn)用中一般使用都是public繼承,極少場景下才會(huì)使用protetced/private繼承。

(5)派生類的默認(rèn)成員函數(shù)

 我們知道類的默認(rèn)的六個(gè)成員函數(shù)有:構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)、賦值運(yùn)算符重載函數(shù)、取地址操作符重載函數(shù)、const修飾的取地址操作符重載函數(shù)。

 在繼承關(guān)系里面,在派生類中如果沒有顯示定義這六個(gè)成員函數(shù),編譯系統(tǒng)則會(huì)默認(rèn)合成這六個(gè)默認(rèn)的成員函數(shù)。

通過對(duì)以上例子的調(diào)試與分析,可以得出繼承關(guān)系中構(gòu)造函數(shù)與析構(gòu)函數(shù)分別的調(diào)用順序?yàn)椋?/p>

構(gòu)造函數(shù)調(diào)用順序:

關(guān)于繼承與派生的小結(jié)

析構(gòu)函數(shù)調(diào)用順序:

關(guān)于繼承與派生的小結(jié)

(6)繼承體系中的作用域

a.在繼承體系中基類和派生類是兩個(gè)不同作用域。

b.子類和父類中有同名成員,子類成員將屏蔽父類對(duì)成員的直接訪問。(在子類成員函數(shù)中,可以使用 基類::基類成員 訪問)

c.注意在實(shí)際中在繼承體系里面最好不要定義同名的成員。

class Base
{
public:
int x;
void Show()
{
cout << "This is Base, x= " << x << endl;
}
};
class Derived :public Base
{
public:
int x;//同名數(shù)據(jù)成員
void Show()//同名成員函數(shù)
{
cout << "This is derived , x= " << x << endl;
}
};
int main()
{
Derived d;
d.x = 5;//使用同名覆蓋原則
d.Show();//使用同名覆蓋原則
d.Base::x = 67;//使用作用域運(yùn)算符訪問基類成員
d.Base::Show();//使用作用域運(yùn)算符訪問基類成員函數(shù)
}

(7)繼承與轉(zhuǎn)換--賦值兼容規(guī)則--public繼承

a.子類對(duì)象可以賦值給父類對(duì)象(切割/切片)

b.父類對(duì)象不能賦值給子類對(duì)象

c.父類的指針/引用可以指向子類對(duì)象

d.子類的指針/引用不能指向父類對(duì)象(可以通過強(qiáng)制類型轉(zhuǎn)換完成)

(8)友元與繼承

 友元關(guān)系不能繼承,也就是說基類友元不能訪問子類私有和保護(hù)成員。

若要訪問,在派生類中也加友元函數(shù)的聲明,這樣就可以訪問了。

(9)繼承與靜態(tài)成員

 基類定義了static成員,則整個(gè)繼承體系里面只有一個(gè)這樣的成員。無論派生出多少個(gè)子類,都只有一個(gè)static成員實(shí)例。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁名稱:關(guān)于繼承與派生的小結(jié)-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://muchs.cn/article30/dschpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)企業(yè)建站、自適應(yīng)網(wǎng)站、服務(wù)器托管網(wǎng)頁設(shè)計(jì)公司、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)