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

C++中繼承的概念和定義

 更新時間:2021年08月18日 15:31:34   作者:久病成良醫(yī)  
這篇文章主要介紹了詳解C++ 中的概念和定義,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能給你帶來幫助

1.繼承的概念及定義

1.1繼承的概念

繼承機制是面向?qū)ο蟪绦蛟O(shè)計使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有類特性的基礎(chǔ)上進行擴展,增加功能,這樣產(chǎn)生新的類,稱派生類。繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的層次結(jié)構(gòu),體現(xiàn)了由簡單到復(fù)雜的認知過程。以前我們接觸的復(fù)用都是函數(shù)復(fù)用,繼承是類設(shè)計層次的復(fù)用。

1.2繼承的定義格式

在這里插入圖片描述

1.3繼承基類成員訪問方式的變化

在這里插入圖片描述

(1)公有繼承

基類的公有成員,子類可以繼承為自己的公有成員。在派生類可以訪問,在外部也可以訪問。

基類的保護成員,子類可以繼承為自己的保護成員,在派生類可以訪問,在外部不可以訪問。

基類的私有成員,子類不可以訪問基類的私有成員。

(2)保護繼承

基類公有成員,子類中繼承為自己的保護成員,在派生類可以訪問,在外部不可以訪問。

基類保護成員,子類中繼承為自己的保護成員,在派生類可以訪問,在外部不可以訪問。

基類私有成員,子類不可以訪問基類的私有成員。

(3)私有繼承

基類公有成員,子類中繼承為自己的私有成員,在派生類可以訪問,在外部不可以訪問。

基類保護成員,子類中繼承為自己的私有成員,在派生類可以訪問,在外部不可以訪問。

基類私有成員,子類不可以訪問基類的私有成員。

1.4總結(jié)

在這里插入圖片描述

(1)基類private成員任何方式繼承在派生類中都是不可見的。不可見指派生類對象不能去訪問它,但是基類的私有成員還是被繼承到了派生類對象中。

(2)基類的public成員和protected成員任何繼承方式在派生類都可以訪問。

(3)基類pretected成員,派生類可以訪問,類外不能訪問。

(4)基類的其他成員在子類的訪問方式 == Min(成員在基類的訪問限定符,繼承方式)。public > protected > private。

(5)使用關(guān)鍵字class時默認的繼承方式是private,使用struct時默認的繼承方式是public,不過最好顯示的寫出繼承方式。

class Derived : public Base   //指明繼承方式是public
class Derived : Base          //沒寫的情況下是private
struct Derived : Base         //沒寫的情況下是public

(6)在實際運用中一般使用都是public繼承,幾乎很少使用protetced/private繼承,實際中
擴展維護性不強。

2.基類和派生類對象賦值轉(zhuǎn)換

派生類對象可以賦值給基類的對象 / 基類的指針 / 基類的引用。

基類對象不能賦值給派生類對象

基類的指針可以通過強制類型轉(zhuǎn)換賦值給派生類的指針。但是必須是基類的指針是指向派生類對象時才是安全的。

class Person //基類/父類
{
protected :
	string _name; // 姓名
	string _sex; // 性別
	int _age; // 年齡
};
class Student : public Person  //派生類/子類
{
public :
	int _No ; // 學(xué)號
};
void Test ()
{
	Student sobj ;  //創(chuàng)建子類對象sobj
	// 1.子類對象可以賦值給父類對象/指針/引用
	Person pobj = sobj ;
	Person* pp = &sobj;
	Person& rp = sobj;
	//2.基類對象不能賦值給派生類對象
	sobj = pobj;  //錯誤
	// 3.基類的指針可以通過強制類型轉(zhuǎn)換賦值給派生類的指針
	pp = &sobj
	Student* ps1 = (Student*)pp; // 這種情況轉(zhuǎn)換時可以的。
	ps1->_No = 10;
	pp = &pobj;
	Student* ps2 = (Student*)pp; // 這種情況轉(zhuǎn)換時雖然可以,但是會存在越界訪問的問題
	ps2->_No = 10;
}

3.繼承中的作用域

在繼承體系中基類和派生類都有獨立的作用域。

子類和父類中有同名成員,子類成員將屏蔽父類對同名成員的直接訪問,這種情況叫隱藏,也叫重定義。(在子類成員函數(shù)中,可以使用 基類::基類成員 顯示訪問)

需要注意的是如果是成員函數(shù)的隱藏,只需要函數(shù)名相同就構(gòu)成隱藏。

注意在實際中在繼承體系里面最好不要定義同名的成員。

// B中的fun和A中的fun不是構(gòu)成重載,因為不是在同一作用域
// B中的fun和A中的fun構(gòu)成隱藏,成員函數(shù)滿足函數(shù)名相同就構(gòu)成隱藏。
class A  //基類
{
public:
	void fun()
	{
		cout << "func()" << endl;
	}
};
class B : public A  //派生類
{
public:
	void fun(int i)
	{
		A::fun();
		cout << "func(int i)->" <<i<<endl;
	}
};
void Test()
{
	B b;
	b.fun(10);
};
//如果通過子類對象調(diào)用相同名稱的成員時,優(yōu)先訪問子類的,基類同名的成員永遠無法通過
// 子類對象直接調(diào)用到,相當(dāng)于子類同名成員將基類的同名成員隱藏了
// 如果想要同名子類對象訪問基類中同名的成員,只需在成員前加上基類名稱::
// 如果在子類成員函數(shù)中,想要訪問基類同名的成員,只需在基類成員前加上基類名稱::
class Base  //基類
{
public:
	void SetBase(int b)
	{
		_b = b;
	}
	void fun()
	{
		cout << "Base::fun()" << endl;
	}
public:
	int _b;
	char _c;
};
class Derived : public Base  //派生類
{
public:
	void SetDeirved(int b, int d)
	{
		_c = 100;
		Base::_c = 100;  //如果在子類成員函數(shù)中,想要訪問基類同名的成員,只需在基類成員前加上基類名稱::
		__super::_c = 100;
		SetBase(b);
		_d = d;
	}
	void fun(int a)
	{
		cout << "Derived::fun(int)" << endl;
	}
public:
	int _d;
	int _c;
};

int main()
{
	Base b;
	b.SetBase(10);
	Derived d;
	d.SetDeirved(100, 200);
	/*
	如果子類和基類中具有相同名稱的成員變量時,不管成員變量的類型是否相同,
	都優(yōu)先訪問子類的同名成員變量
	不能通過子類對象直接訪問子類和父類中同名的成員變量,就相當(dāng)與子類同名的成員變量將基類的同名成員變量隱藏了
	*/
	d._c = 'A';   // d對象中有兩個_c
	// 有些情況下可能需要通過子類對象訪問基類中同名的成員變量
	d.Base::_c = 'B';

	// d.fun();   // 編譯報錯
	d.fun(10);
	d.Base::fun(); //如果想要同名子類對象訪問基類中同名的成員,只需在成員前加上基類名稱::
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言簡明講解變量的屬性

    C語言簡明講解變量的屬性

    我們知道以在?C?語言中的變量有自己的屬性,只要在定義變量的時候加上“屬性”關(guān)鍵字即可?!皩傩浴标P(guān)鍵字指明變量的特有意義,但是?register?關(guān)鍵字只是請求寄存器變量,所以不一定會成功
    2022-04-04
  • c++中八大排序算法

    c++中八大排序算法

    本篇文章主要介紹了八大排序算法,詳細的介紹了八個算法思想,實現(xiàn)代碼,穩(wěn)定性,時間復(fù)雜度等,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • C語言繪制余弦、正弦曲線

    C語言繪制余弦、正弦曲線

    這篇文章主要為大家詳細介紹了C語言繪制余弦、正弦曲線的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 淺析C/C++中的可變參數(shù)與默認參數(shù)

    淺析C/C++中的可變參數(shù)與默認參數(shù)

    C支持可變參數(shù)的函數(shù),這里的意思是C支持函數(shù)帶有可變數(shù)量的參數(shù),最常見的例子就是我們十分熟悉的printf()系列函數(shù)。我們還知道在函數(shù)調(diào)用時參數(shù)是自右向左壓棧的
    2013-09-09
  • C++探索構(gòu)造函數(shù)私有化會產(chǎn)生什么結(jié)果

    C++探索構(gòu)造函數(shù)私有化會產(chǎn)生什么結(jié)果

    C++的構(gòu)造函數(shù)的作?:初始化類對象的數(shù)據(jù)成員。即類的對象被創(chuàng)建的時候,編譯系統(tǒng)對該對象分配內(nèi)存空間,并?動調(diào)?構(gòu)造函數(shù),完成類成員的初始化。構(gòu)造函數(shù)的特點:以類名作為函數(shù)名,?返回類型
    2022-05-05
  • C/C++?Qt?運用JSON解析庫的實例代碼

    C/C++?Qt?運用JSON解析庫的實例代碼

    這篇文章主要介紹了C/C++?Qt?運用JSON解析庫的相關(guān)知識,通過代碼依次解析這個json文件中的每一個參數(shù),代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • C++?AVL樹的兩單旋和兩雙旋的項目實踐

    C++?AVL樹的兩單旋和兩雙旋的項目實踐

    本文主要介紹了C++?AVL樹的兩單旋和兩雙旋的項目實踐,根據(jù)節(jié)點插入位置的不同,AVL樹的旋轉(zhuǎn)分為四種,下面就來介紹一下,感興趣的可以了解一下
    2024-03-03
  • 解讀C++編程中派生類的構(gòu)成和創(chuàng)建

    解讀C++編程中派生類的構(gòu)成和創(chuàng)建

    這篇文章主要介紹了解讀C++編程中派生類的構(gòu)成和創(chuàng)建,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++實現(xiàn)飛機訂票系統(tǒng)

    C++實現(xiàn)飛機訂票系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)飛機訂票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實現(xiàn)手寫Map(數(shù)組+鏈表+紅黑樹)的示例代碼

    C語言實現(xiàn)手寫Map(數(shù)組+鏈表+紅黑樹)的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)手寫Map(數(shù)組+鏈表+紅黑樹),文中的示例代碼講解詳細,對我們學(xué)習(xí)有一定借鑒價值,需要的可以參考一下
    2022-09-09

最新評論

建昌县| 清远市| 大安市| 溧水县| 尚义县| 茶陵县| 浙江省| 金乡县| 离岛区| 承德县| 娄烦县| 商城县| 松溪县| 富源县| 西宁市| 海丰县| 白朗县| 稻城县| 资阳市| 凤阳县| 东乌珠穆沁旗| 兴城市| 台州市| 驻马店市| 新源县| 盖州市| 谢通门县| 社会| 深州市| 凤城市| 公主岭市| 克东县| 永平县| 凤阳县| 昆明市| 桦川县| 宝兴县| 达拉特旗| 龙江县| 德庆县| 马龙县|