最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深度揭秘C++面向對象編程中繼承的核心概念

 更新時間:2023年07月31日 14:16:21   作者:Aomnitrix  
我們知道C語言是面向過程的編程語言,C++在C語言的基礎上進化出了面向對象的模型,而繼承就是面向對象的重要屬性,下面就讓小編來和大家詳細講講吧

一.繼承

1.繼承與面向對象

我們知道C語言是面向過程的編程語言,C++在C語言的基礎上進化出了面向對象的模型。而繼承就是面向對象的重要屬性。繼承使得我們在一個基礎屬性上能夠加以拓展,用來描述很多具有相同基本屬性又各有不同的事務。

2.繼承方式訪問權限

繼承方式與訪問權限相同都有三種:public、private、protected繼承,再結合基類的三種訪問權限,在派生類中就有九種不同的情況,可以總結為:基類為私有的成員在派生類一律不可見,其余權限按照與繼承方式相比較小的來。

3.切片(賦值轉換)

在實際應用場景中我們常用基類代表幾種事務共同的基本屬性,派生類用來代表自己獨特的屬性,這就會導致派生類對象一定是包含父類對象的,所以子類對象可以賦給父類對象/指針/引用,過程會將子類中獨特屬性的成員切出,剩余賦給父類對象,所以稱為切片,不僅如此基類的指針可以通過強制類型轉換賦值給派生類的指針,代碼演示如下:

class Person
{
protected:
	string _name; 
	string _sex;
	int _age; 
};
class Student : public Person
{
public:
	int _No;
};
void Test()
{
	Student sobj;
	// 子類對象可以賦值給父類對象/指針/引用
	Person pobj = sobj;
	Person* pp = &sobj;
	Person& rp = sobj;
	// 基類的指針可以通過強制類型轉換賦值給派生類的指針
	pp = &sobj;
	Student * ps1 = (Student*)pp; // 這種情況轉換時可以的。
	ps1->_No = 10;
	pp = &pobj;
	Student* ps2 = (Student*)pp; // 這種情況轉換時雖然可以,但是會存在越界訪問的問
	ps2->_No = 10;
}
int main()
{
	Test();
	return 0;
}

4.作用域

如果在基類和派生類定義了同名函數(shù)就會構成隱藏/重定義,子類成員將屏蔽父類對同名成員的直接訪問,如下所示;

class A
{
public:
	A(int num = 0)
	:_num(num)
	{}
	void func()
	{
		cout << _num << endl;
	}
private:
	int _num;
};
class B : public A
{
public:
	B(int val = 1)
		:_val(val)
	{}
	void func()
	{
		cout << _val<< endl;
	}
private:
	int _val;
};
int main()
{
	B b;
	b.func();
	b.A::func();
	return 0;
}

5.默認成員函數(shù)

繼承這里遵循著一個規(guī)則:構造先父后子,析構先子后父。因為派生類中一定包含基類的對象所以派生類的構造函數(shù)必須調用基類的構造函數(shù)初始化基類的那一部分成員,如果基類沒有默認的構造函數(shù)(無參、全缺省、編譯器默認生成),則必須在派生類構造函數(shù)的初始化列表階段顯示調用。

派生類的拷貝構造函數(shù)必須調用基類的拷貝構造完成基類的拷貝初始化。

派生類的operator=必須要調用基類的operator=完成基類的復制。

基類的析構函數(shù)調用后會自動調用基類的析構函數(shù),不能在派生類顯示調用不然無法保證析構先子后父的順序。

6.友元與靜態(tài)函數(shù)

友元關系不會繼承,靜態(tài)函數(shù)不會多次實例化。

7.解決菱形繼承的二義性與數(shù)據(jù)冗余

菱形繼承是多繼承的一種特殊情況,我們在編寫代碼時應要避免菱形繼承:

如上圖所示就是一個菱形繼承,這樣會導致A類中會有兩份P類中的成員,這樣不僅會浪費空間,而且會產(chǎn)生二義性,如果我通過A對象訪問P中的成員,因為A類中有兩份P中的成員所有會有歧義。為了解決此問題,出現(xiàn)了虛擬繼承。如下圖所示:

那虛繼承是如何完成的呢:在d類中建立虛基表,將原來冗余的對象放在d對象空間最下面,B、C原來存儲A的位置存儲當前位置與空間最下面A對象的偏移量,保證指定B或者C對象訪問_a時都能訪問到。

8.繼承與組合

與繼承相比組合的耦合度更低,更適合我們使用!繼承又稱為白箱復用,組合稱為黑盒復用,因為使用組合的話是無法看到類內部的設計。

到此這篇關于深度揭秘C++面向對象編程中繼承的核心概念的文章就介紹到這了,更多相關C++繼承內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言 操作符#與##使用方法詳解

    C語言 操作符#與##使用方法詳解

    在類函數(shù)宏中(帶參數(shù)的宏),#號作為一個預處理運算符,可以把記號轉換成字符串。##相當于連接符,它會將兩邊的內容連接起來,形成新的標識符,下面請看詳細的教程
    2022-04-04
  • C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例

    C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例

    這篇文章主要介紹了C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • C++ cmake實現(xiàn)日志類的示例代碼

    C++ cmake實現(xiàn)日志類的示例代碼

    CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。本文就來利用cmake實現(xiàn)日志類,感興趣的小伙伴可以了解一下
    2023-03-03
  • windows下vscode使用cmake的方法

    windows下vscode使用cmake的方法

    這篇文章主要介紹了windows下vscode使用cmake的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C++實現(xiàn) 單例模式實例詳解

    C++實現(xiàn) 單例模式實例詳解

    這篇文章主要介紹了C++實現(xiàn) 單例模式實例詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • C語言程序如何求學生總成績和平均成績

    C語言程序如何求學生總成績和平均成績

    這篇文章主要介紹了C語言程序如何求學生總成績和平均成績,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • OpenCV使用GrabCut實現(xiàn)摳圖功能

    OpenCV使用GrabCut實現(xiàn)摳圖功能

    Grabcut是基于圖割(graph cut)實現(xiàn)的圖像分割算法,它需要用戶輸入一個bounding box作為分割目標位置,實現(xiàn)對目標與背景的分離/分割。本文將使用GrabCut實現(xiàn)摳圖功能,需要的可以參考一下
    2023-02-02
  • C語言中雙向鏈表和雙向循環(huán)鏈表詳解

    C語言中雙向鏈表和雙向循環(huán)鏈表詳解

    這篇文章主要介紹了C語言中雙向鏈表和雙向循環(huán)鏈表詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • C語言實現(xiàn)24位彩色圖像二值化

    C語言實現(xiàn)24位彩色圖像二值化

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)24位彩色圖像二值化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++ std::unique_lock 用法實例詳解

    C++ std::unique_lock 用法實例詳解

    std::unique_lock 是 C++11 提供的一個用于管理互斥鎖的類,它提供了更靈活的鎖管理功能,適用于各種多線程場景,這篇文章給大家介紹了C++ std::unique_lock 用法,感興趣的朋友跟隨小編一起看看吧
    2023-09-09

最新評論

吴川市| 浙江省| 武平县| 山丹县| 蛟河市| 六安市| 阿拉善右旗| 江陵县| 石泉县| 昌平区| 临高县| 巨野县| 五华县| 建德市| 阿瓦提县| 丰都县| 井冈山市| 嘉定区| 岳池县| 扶余县| 罗江县| 祥云县| 西乌珠穆沁旗| 莲花县| 余姚市| 长兴县| 石棉县| 锡林浩特市| 定南县| 贵德县| 诸暨市| 垫江县| 渭源县| 赤峰市| 沂源县| 紫金县| 铁岭市| 河源市| 遵义县| 沙河市| 兖州市|