真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

繼承的概念和定義 繼承的概念

繼承是面向?qū)ο蟪绦蛟O(shè)計使代碼可以復(fù)用的重要手段,當(dāng)創(chuàng)建一個類時,您不需要重新編寫新的數(shù)據(jù)成員和成員函數(shù),只需指定新建的類繼承了一個已有的類的成員即可。這個已有的類稱為基類,新建的類稱為派生類。

公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出中站免費做網(wǎng)站回饋大家。繼承的定義 定義格式

在這里插入圖片描述

繼承父類成員訪問關(guān)系的變化
類成員/繼承方式public繼承protected繼承private繼承
基類的public成員派生類的public成員派生類的private成員派生類的private成員
基類的protect成員派生類的protected成員派生類的protected成員派生類的private成員
基類的private成員派生類中不可見派生類中不可見派生類中不可見
父類和子類的對象賦值轉(zhuǎn)換
  1. 子類對象可以賦值給父類的對象/父類的指針/父類的引用。一般情況下子類對象都比父類對象大,這里賦值的時候會產(chǎn)生切片或者叫切割。
    切片/切割
    在這里插入圖片描述

  2. 父類對象不能賦值給子類對象。但是指針和引用可以,但是必須進行強制類型轉(zhuǎn)換,并且這個行為十分危險,可能存在越界訪問。

class Person
{public:
	string _name;
};
class Student:public Person
{public:
	int _age;
	int _major;
};

int main()
{//子類可以賦值給父類
	Student a;
	Person b = a;
	Person* c = &a;
	Person& b = a;
	//父類不能賦值給子類
	a = b;
	//父類不能賦值給子類,但是可以進行強制轉(zhuǎn)換
	Person* b1 = &b;
	Student* a1 = (Student*)b1;
	return 0;
}
繼承中的作用域
  1. 在繼承體系中父類和子類都有自己獨立的作用域
  2. 子類和父類中有同名成員,子類成員將屏蔽父類對同名成員的直接訪問,這種情況叫隱藏,也叫重定義。(在子類成員函數(shù)中,可以使用 基類::基類成員 顯示訪問)
子類的默認成員函數(shù) 默認成員函數(shù)
  1. 構(gòu)造函數(shù)
  2. 析構(gòu)函數(shù)
  3. 拷貝構(gòu)造函數(shù)
  4. 賦值操作
原則

繼承下來的調(diào)用父類處理,子類的按照普通類的基本規(guī)則。
那么什么情況下需要我們自己寫?

  1. 父類沒有默認構(gòu)造,需要我們自己寫默認構(gòu)造
  2. 若子類沒有資源需要釋放,就需要我們自己顯示的寫析構(gòu)函數(shù)
  3. 若子類存在深淺拷貝問題,就需要實現(xiàn)拷貝構(gòu)造和賦值解決深淺拷貝問題
    如何寫?
    父類成員調(diào)用父類對應(yīng)的構(gòu)造,拷貝構(gòu)造,operator=和析構(gòu)處理,自己成員按照普通類處理。
    析構(gòu)函數(shù)的名稱會被統(tǒng)一處理為destructor()
  4. 子類的析構(gòu)函數(shù)和父類的析構(gòu)函數(shù)會構(gòu)成隱藏
  5. 子類的析構(gòu)函數(shù)結(jié)束時會自動調(diào)用父類的析構(gòu)函數(shù)
  6. 子類的析構(gòu)函數(shù)不需要調(diào)用父類的析構(gòu)函函數(shù)它會自動調(diào)用,這樣才能保證先析構(gòu)子類成員,再析構(gòu)父類成員。
繼承與友元

友元關(guān)系不能繼承,就比如父親的朋友不一定是你的朋友。

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

父類定義了static成員,則整個繼承體系中只有一個這樣的靜態(tài)成員,無論派生出多少個子類,都只有一個static成員,因此靜態(tài)成員可以繼承下來,但是只有一份。

菱形繼承以及菱形虛擬繼承 單繼承

一個子類只有一個直接父類時稱這個繼承關(guān)系為單繼承。

多繼承

一個子類有兩個或者兩個以上的直接父類時稱這個繼承關(guān)系為多繼承。

菱形繼承

菱形繼承是多繼承的一種特殊情況
在這里插入圖片描述
當(dāng)這樣的繼承關(guān)系出現(xiàn)的時候,對于Assistant會形成數(shù)據(jù)的冗余以及二義性,因為在其中出現(xiàn)了兩份Person。
在這里插入圖片描述
我們看下面一串代碼,

在非虛繼承中
#includeusing namespace std;

class A
{public:
	int _a;
};
class B : public A
//class B : virtual public A
{public:
	int _b;
};
class C : public A
//class C : virtual public A
{public:
	int _c;
};
class D : public B, public C
{public:
	int _d;
};
int main()
{D d;
	d.B::_a = 1;
	d.C::_a = 2;
	d._b = 3;
	d._c = 4;
	d._d = 5;
	return 0;
}

在這里插入圖片描述
當(dāng)我們查看d對象的地址,我們看到里面的存儲是這樣子存儲的。并且是先繼承誰先存儲誰,倘若我們將代碼中的D類換為

class D : public C, public B
{public:
	int _d;
};

在這里插入圖片描述
我們要是將繼承的順序進行調(diào)換,那么我們將看到在d對象中就先存誰的順序就會變換,先繼承的先進行存儲。

在虛繼承中

當(dāng)我們進行調(diào)試

  1. 首先創(chuàng)建了D對象在這里插入圖片描述
  2. _a出現(xiàn)在這個位置在這里插入圖片描述
  3. C中的_a將之前B中的_a進行了覆蓋在這里插入圖片描述
  4. 當(dāng)我i們再觀察內(nèi)存發(fā)現(xiàn)_a存在一個公共的區(qū)域
    在這里插入圖片描述
    我們發(fā)現(xiàn)當(dāng)我們進行虛繼承時是這樣子進行存儲的,A處在一個公共的區(qū)域,但是BC前面的東西還并不知道是什么
    在這里插入圖片描述
    我們查看這里的地址,
    在這里插入圖片描述
    發(fā)現(xiàn)這個地址里面記錄著一個數(shù)字,這個數(shù)字就是B和C相對于公共成員A的偏移量/相對距離。
    此時這個A類一般稱為虛基類,因為是虛繼承下來的,在D里面,A存放在一個公共的區(qū)域,可能B,C都需要進行尋找A,這時候就通過虛基表中記錄的偏移量來進行查找,這個BC之前的這個值就為虛基表的地址,虛基表中存儲的就是偏移量,偏移量上面還有一個空間,既然為虛基表,表里面不會只存一個值,至于這個值具體是什么,在后面的多態(tài)進行講。
繼承和組合
  1. public繼承是一種is-a的關(guān)系,也就是說每個子類對象都是一個父類對象。
  2. 組合是一種has-a的關(guān)系,假設(shè)B組合了A,那么每個B對象中都有一個A對象
  3. 優(yōu)先使用組合而不是類繼承。
    在這里插入圖片描述

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


名稱欄目:C++中的繼承-創(chuàng)新互聯(lián)
文章路徑:http://weahome.cn/article/diighd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部