C++中繼承的性質(zhì)

  1. 繼承機(jī)制是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有類(lèi)性質(zhì)的基礎(chǔ)上進(jìn)行擴(kuò)展,增加功能。

    專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)欽南免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

  2. 繼承的定義的格式:

    class 派生類(lèi)名:繼承類(lèi)型 基類(lèi)名

    繼承類(lèi)型包括有:public(公有繼承)

                    private(私有繼承)

                    protected(保護(hù)繼承)

  3. 繼承關(guān)系基類(lèi)的public成員
    基類(lèi)的private成員
    基    類(lèi)    的protected成員
    繼承引起的訪(fǎng)問(wèn)控制變化
    publicpublic成員
    不可見(jiàn)protected成員非私有成員在子類(lèi)中的訪(fǎng)問(wèn)屬性不變
    privateprivate成員不可見(jiàn)
    private成員非私有成員在子類(lèi)中的訪(fǎng)問(wèn)屬性變?yōu)閜rivate屬性
    protectedprotected成員不可見(jiàn)
    protected成員非私有成員在子類(lèi)中的訪(fǎng)問(wèn)屬性變?yōu)閜rotected屬性

    舉例:

#include <iostream>
using namespace std;
class A
{
public:
	int f1();
private:
	int i1;
protected:
	int j1;
};

int A::f1()
{
	cout << "函數(shù)f1的實(shí)現(xiàn)" << endl;
}

class B :public A
{
public:
	int f2()
	{
		j1 = 0;
		i1 = 0;
		cout << "函數(shù)f2的實(shí)現(xiàn)" << endl;

	}	

C++中繼承的性質(zhì)在公有繼承的子類(lèi)中,不能訪(fǎng)問(wèn)基類(lèi)中的private成員。因?yàn)榛?lèi)和子類(lèi)是兩個(gè)不同的類(lèi)域,private成員只能在類(lèi)能訪(fǎng)問(wèn)。

私有繼承和保護(hù)繼承也是一樣。

注意:不管是哪種繼承方式,在派生類(lèi)中都可以訪(fǎng)問(wèn)基類(lèi)的公有成員和保護(hù)成員,基類(lèi)的私有成員存在,但在子類(lèi)中不能訪(fǎng)問(wèn)。

4. 關(guān)鍵字class繼承時(shí),缺省繼承類(lèi)型則默認(rèn)為:private.

   關(guān)鍵字struct繼承時(shí),缺省繼承類(lèi)型則默認(rèn)為:public.

5. 繼承關(guān)系中構(gòu)造函數(shù)的調(diào)用順序:

   基類(lèi)構(gòu)造函數(shù)------>派生類(lèi)中對(duì)象的構(gòu)造函數(shù)--------->派生類(lèi)構(gòu)造函數(shù)體

舉例:

#include <iostream>
using namespace std;
class A
{
public:
	A()
	{
		a = 0;
		cout << "A's default constuctor called." << endl;
	}
private:
	int a;
};

class B :public A
{
public:
	B()
	{
		b = 0;
		cout << "B's default constuctor called." << endl;
	}
private:
	int b;
};
int main()
{
	B bb;
	system("pause");
	return 0;
}

C++中繼承的性質(zhì)

6. 繼承關(guān)系中析構(gòu)函數(shù)的調(diào)用順序:

派生類(lèi)析構(gòu)函數(shù)體------>派生類(lèi)對(duì)中析構(gòu)函數(shù)--------->基類(lèi)構(gòu)造函數(shù)

說(shuō)明:

  1. 基類(lèi)沒(méi)有缺省構(gòu)造函數(shù),派生類(lèi)必須要在初始化列表中顯式給出基類(lèi)名和參數(shù)列表;

  2. 基類(lèi)沒(méi)有定義構(gòu)造函數(shù),則派生類(lèi)也可以不用定義,全部使用缺省構(gòu)造函數(shù);

  3. 基類(lèi)定義了帶有形參表構(gòu)造函數(shù),派生類(lèi)就一定定義構(gòu)造函數(shù)。

7.關(guān)于繼承體系中的作用域:

在繼承體系中基類(lèi)和派生類(lèi)是兩個(gè)不同的作用域,如果子類(lèi)中有與基類(lèi)同名的成員,子類(lèi)成員屏蔽基類(lèi)對(duì)成員直接訪(fǎng)問(wèn)。

注:在子類(lèi)成員函數(shù)中,可以使用 基類(lèi)名::基類(lèi)成員名   這樣的方式類(lèi)訪(fǎng)問(wèn)。

舉例:

#include <iostream>
using namespace std;
class A
{
public:
	int temp;
private:
	int a;
};

class B :public A
{
public:
	int temp;
	int add()
	{
		temp = 100;
		A::temp = 0;
		return temp;
	}
	
private:
	int b;
	
};
int main()
{
	B bb;
	int ret = 0;
	ret = bb.add();
	system("pause");
	return 0;
}

C++中繼承的性質(zhì)

將子類(lèi)B中的temp賦值為100,基類(lèi)中的temp賦值為0;

8. 繼承中的賦值兼容規(guī)則:

   子類(lèi)對(duì)象可以賦值給基類(lèi)對(duì)象,反之不可以;

   基類(lèi)對(duì)象的指針/引用可以指向基類(lèi)對(duì)象,子類(lèi)對(duì)象的指針/引用可以通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換的方式指向基    類(lèi)對(duì)象,但是有內(nèi)存泄漏的風(fēng)險(xiǎn)。

9. 友元與繼承

   友元關(guān)系不能繼承,基類(lèi)的友元不能訪(fǎng)問(wèn)子類(lèi)的私有和保護(hù)成員。

舉例:

#include <iostream>
using namespace std;
class A
{
	friend class C;
public:
	int temp;
private:
	int a;
};

class B :public A
{
public:
	int temp;
private:
	int b;
protected:
	int i;
};

class C
{
public:
	int c;
	int f()
	{
		temp = 2;
		i = 0;
		return 0;
	}
};

int main()
{
	C bb;
	int ret = 0;
	ret = bb.f();
	system("pause");
	return 0;
}

C++中繼承的性質(zhì)10. 單繼承:一個(gè)子類(lèi)只有一個(gè)基類(lèi)

11. 多繼承:一個(gè)子類(lèi)有多個(gè)基類(lèi),

            定義形式:class 子類(lèi)名:繼承類(lèi)型 基類(lèi)名<,繼承類(lèi)型 基類(lèi)名,繼承類(lèi)型 基類(lèi)名,...>

12. 菱形繼承:

            定義形式:

            舉例:

                 C++中繼承的性質(zhì)發(fā)現(xiàn)問(wèn)題:Assistant的對(duì)象中存在兩份Person成員,菱形繼承中存在二義性和數(shù)據(jù)冗余的問(wèn)題。

C++中繼承的性質(zhì)

虛繼承可以解決了菱形繼承中二義性和數(shù)據(jù)冗余的問(wèn)題,但是一般不適用虛繼承,因?yàn)樘摾^承帶來(lái)了性能上的損耗。

說(shuō)明:C++語(yǔ)言規(guī)定,虛基類(lèi)子對(duì)象是由最派生類(lèi)的構(gòu)造函數(shù)通過(guò)調(diào)用虛基類(lèi)的構(gòu)造函數(shù)進(jìn)行初始化的。如果一個(gè)派生類(lèi)有一個(gè)直接或間接的虛基類(lèi),那么派生類(lèi)的構(gòu)造函數(shù)的成員初始列表中必須列出對(duì)虛基類(lèi)構(gòu)造函數(shù)的調(diào)用;如果未列出,則表示使用該虛基類(lèi)的默認(rèn)構(gòu)造函數(shù)來(lái)初始化派生類(lèi)對(duì)象中的虛基類(lèi)子對(duì)象。

網(wǎng)頁(yè)題目:C++中繼承的性質(zhì)
網(wǎng)站鏈接:http://muchs.cn/article30/ghscso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站小程序開(kāi)發(fā)、搜索引擎優(yōu)化、標(biāo)簽優(yōu)化網(wǎng)站設(shè)計(jì)公司、Google

廣告

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

網(wǎng)站優(yōu)化排名