C++繼承-創(chuàng)新互聯(lián)

繼承本質(zhì)是類(lèi)層次的復(fù)用。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括留壩網(wǎng)站建設(shè)、留壩網(wǎng)站制作、留壩網(wǎng)頁(yè)制作以及留壩網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,留壩網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到留壩省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

學(xué)生和老師的類(lèi)中包含Person類(lèi)的內(nèi)容。?

Print函數(shù)也是繼承下來(lái)的。?

上述代碼中,Peraon叫父類(lèi),也叫基類(lèi),Student叫子類(lèi)也叫派生類(lèi)。

public叫繼承方式,繼承方式包括公有保護(hù)和繼承。

基類(lèi)中的私有本質(zhì)是不想被繼承。

父類(lèi)中的私有成員,子類(lèi)中不能訪問(wèn)。父類(lèi)中的保護(hù)成員,子類(lèi)可以訪問(wèn)。

但是age在studen類(lèi)中,就是不能被訪問(wèn)。

基類(lèi)的私有成員在子類(lèi)都是不可見(jiàn)?;?lèi)的其他成員在子類(lèi)的訪問(wèn)方式 == Min(成員在基類(lèi)的訪問(wèn)限定符,繼承方式),public >protected >private。

去掉繼承方式,class默認(rèn)是私有繼承,子類(lèi)外部不能訪問(wèn)繼承成員,struct默認(rèn)是公有繼承,子類(lèi)外部能訪問(wèn)繼承成員。

子類(lèi)會(huì)先構(gòu)造父類(lèi),然后構(gòu)造子類(lèi),析構(gòu)時(shí)先析構(gòu)子類(lèi),再析構(gòu)父類(lèi)。


父類(lèi)和子類(lèi)賦值轉(zhuǎn)換。

子類(lèi)對(duì)象 可以賦值給 父類(lèi)的對(duì)象 / 父類(lèi)的指針 / 父類(lèi)的引用。?

int main()
{
Person p;
Student s;
p=s;
}

其中p=s中間不存在類(lèi)型轉(zhuǎn)換,沒(méi)有產(chǎn)生臨時(shí)變量。

而底下這個(gè)i=d會(huì)產(chǎn)生臨時(shí)變量,臨時(shí)變量是int類(lèi)型。

所以底下沒(méi)有const修飾的引用會(huì)報(bào)錯(cuò)。在前面加上const就好了。

父類(lèi) ++后,子類(lèi)也++

賦指針也行,指針指向子類(lèi)中的父類(lèi)部分。

  • 繼承中的作用域

下面這個(gè)_num訪問(wèn)的是Student本身的_num

訪問(wèn)父類(lèi)的話可以指定作用域。

子類(lèi)和父類(lèi)有同名成員時(shí),子類(lèi)隱藏了父類(lèi)成員。

子類(lèi)和父類(lèi)中有同名成員,子類(lèi)成員將屏蔽父類(lèi)對(duì)同名成員的直接訪問(wèn),這種情況叫隱藏,
也叫重定義。?


兩個(gè)fun構(gòu)成隱藏關(guān)系。?

構(gòu)成隱藏關(guān)系。

父類(lèi)和子類(lèi)函數(shù)名相同就構(gòu)成隱藏。

重載要求必須在同一個(gè)作用域。?兩個(gè)fun不構(gòu)成重載。

class A
{
public:
	void fun()
	{
		cout<< "A::func()"<< endl;
	}
};
class B : public A
{
public:
	void fun(int i)
	{
		cout<< "B::func(int i)->"<< i<< endl;
	}
};

void Test()
{
	B b;
	b.fun(10);
};

如果去掉fun調(diào)用時(shí)的參數(shù),就會(huì)編譯報(bào)錯(cuò)。

因?yàn)閮蓚€(gè)fun構(gòu)成隱藏關(guān)系,去掉fun的參數(shù),就要訪問(wèn)A中的fun,但因?yàn)楸浑[藏,直接訪問(wèn)不行。

class A
{
public:
	void fun()
	{
		cout<< "A::func()"<< endl;
	}
};
class B : public A
{
public:
	void fun(int i)
	{
		cout<< "B::func(int i)->"<< i<< endl;
	}
};

void Test()
{
	B b;
	b.fun();
};

這樣改就行了。?

建議繼承中不要定義同名成員。


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

為什么調(diào)用Student會(huì)調(diào)用Person中的函數(shù)并執(zhí)行?

子類(lèi)中,父類(lèi)成員調(diào)用父類(lèi)構(gòu)造函數(shù)完成初始化。

父類(lèi)沒(méi)有默認(rèn)構(gòu)造函數(shù)會(huì)報(bào)錯(cuò)。

規(guī)定不能在子類(lèi)初始化列表直接初始化父類(lèi)成員變量。

必須要調(diào)用父類(lèi)的成員函數(shù)。

下面看看拷貝構(gòu)造。

父類(lèi)部分調(diào)用父類(lèi)拷貝構(gòu)造。

而如果是自定義類(lèi)型,需要我們寫(xiě)個(gè)拷貝構(gòu)造。

我們看到父類(lèi)中拷貝構(gòu)造函數(shù)參數(shù)是父類(lèi)。

在這里如何找到要拷貝的Person對(duì)象?

我們直接傳s就可以,?

子類(lèi)傳給父類(lèi)發(fā)生了賦值轉(zhuǎn)換。s傳的就是Person中的內(nèi)容。?

我們來(lái)看看賦值。

我們不寫(xiě),也會(huì)默認(rèn)調(diào)用父類(lèi)賦值。

顯示寫(xiě)就這樣寫(xiě)。?

但這樣運(yùn)行會(huì)報(bào)棧溢出錯(cuò)誤。

因?yàn)檫@個(gè)賦值和父類(lèi)賦值構(gòu)成隱藏關(guān)系,這里面的operator=(s)調(diào)用的是自己,所以會(huì)棧溢出。

這樣改就好了。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁(yè)題目:C++繼承-創(chuàng)新互聯(lián)
文章地址:http://bm7419.com/article14/cessge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)定制開(kāi)發(fā)搜索引擎優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、電子商務(wù)

廣告

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

綿陽(yáng)服務(wù)器托管