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

繼承本質(zhì)是類層次的復用。

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

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

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

上述代碼中,Peraon叫父類,也叫基類,Student叫子類也叫派生類。

public叫繼承方式,繼承方式包括公有保護和繼承。

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

父類中的私有成員,子類中不能訪問。父類中的保護成員,子類可以訪問。

但是age在studen類中,就是不能被訪問。

基類的私有成員在子類都是不可見。基類的其他成員在子類的訪問方式 == Min(成員在基類的訪問限定符,繼承方式),public >protected >private。

去掉繼承方式,class默認是私有繼承,子類外部不能訪問繼承成員,struct默認是公有繼承,子類外部能訪問繼承成員。

子類會先構(gòu)造父類,然后構(gòu)造子類,析構(gòu)時先析構(gòu)子類,再析構(gòu)父類。


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

子類對象 可以賦值給 父類的對象 / 父類的指針 / 父類的引用。?

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

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

而底下這個i=d會產(chǎn)生臨時變量,臨時變量是int類型。

所以底下沒有const修飾的引用會報錯。在前面加上const就好了。

父類 ++后,子類也++

賦指針也行,指針指向子類中的父類部分。

  • 繼承中的作用域

下面這個_num訪問的是Student本身的_num

訪問父類的話可以指定作用域。

子類和父類有同名成員時,子類隱藏了父類成員。

子類和父類中有同名成員,子類成員將屏蔽父類對同名成員的直接訪問,這種情況叫隱藏,
也叫重定義。?


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

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

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

重載要求必須在同一個作用域。?兩個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ù),就會編譯報錯。

因為兩個fun構(gòu)成隱藏關(guān)系,去掉fun的參數(shù),就要訪問A中的fun,但因為被隱藏,直接訪問不行。

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();
};

這樣改就行了。?

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


  • 派生類的默認成員函數(shù)

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

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

父類沒有默認構(gòu)造函數(shù)會報錯。

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

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

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

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

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

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

在這里如何找到要拷貝的Person對象?

我們直接傳s就可以,?

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

我們來看看賦值。

我們不寫,也會默認調(diào)用父類賦值。

顯示寫就這樣寫。?

但這樣運行會報棧溢出錯誤。

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

這樣改就好了。

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

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

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

廣告

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

綿陽服務器托管