中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中的繼承模式有哪些

發布時間:2021-03-23 09:25:34 來源:億速云 閱讀:212 作者:小新 欄目:開發技術

這篇文章主要介紹了C++中的繼承模式有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

繼承是OOP設計中的重要概念。在C++語言中,派生類繼承基類有三種繼承方式:私有繼承(private)、保護繼承(protected)和公有繼承(public)。

一、繼承規則

繼承是C++中的重要特性,派生類可以訪問基類中的protected和public成員
先上代碼:

#include<iostream>
using namespace std;

class Base
{
	private:
			void func_pri();
	protected:
			void func_pro();
	public:
			void func_pub();
};

void Base::func_pri()
{
	cout << "private" << endl;
}
void Base::func_pro()
{
	cout << "protected" << endl;
}
void Base::func_pub()
{
	cout << "public" << endl;
	this->func_pri();
}

class Derive:public Base
{
	public:
		void function();
};

void Derive::function()
{
	//func_pri();調用private成員會產生編譯錯誤
	func_pro();
	func_pub();
}

int main()
{
	Derive* derive;
	derive=new Derive;
	derive->function();
	//output:
	//protected public private
	delete derive;
	return 0;
}

醬在這里用一段簡單地代碼為大家說明了繼承的規則。派生類只能訪問基類的public和protected成員,無法訪問private成員;若要調用類中private成員,要在類內部使用this指針傳參(關于this指針的用法,醬在后續文章中會為大家進一步整理)。這里Derive是public Base,是公有繼承。
上表:


C++中的繼承模式有哪些

二、繼承類型

首先要確立一個概念:無論是公有、私有還是保護繼承,說到底它們都屬于繼承,滿足繼承的基本規則(如上表)。無論是private、protected還是public,對于直接向基類繼承的派生類來說幾乎沒有影響(即俗稱的“子代”而非“孫子代”)。上面的代碼class Derive:public Base換成private Base和protected Base,結果都是一樣的。
影響的是派生類的繼承,即“孫子代”。

1.保護繼承

先上代碼:

#include<iostream>
using namespace std;

class Base
{
	private:
			void func_pri();
	protected:
			void func_pro();
	public:
			void func_pub();
};

void Base::func_pri()
{
	cout << "private" << endl;
}
void Base::func_pro()
{
	cout << "protected" << endl;
}
void Base::func_pub()
{
	cout << "public" << endl;
	this->func_pri();
}

class Derive:protected Base
{
	public:
		void function();
};

void Derive::function()
{
	func_pro();
	func_pub();
}

class Derive_sec:public Derive
{
	public:
		void func_sec();
};

void Derive_sec::func_sec()
{
	func_pub();
	func_pro();
	//func_pri();調用這里時會產生錯誤
}

int main()
{
	Derive_sec* derive;
	derive=new Derive_sec;
	derive->func_sec();
	delete derive;
	return 0;
}

這段代碼運行后的結果是public protected。
可以看出的是Derive_sec類(子二代)可以調用的是Base基類的protected和public成員函數,而無法調用private成員函數。

2.私有繼承

先上代碼:

#include<iostream>
using namespace std;

class Base
{
	private:
			void func_pri();
	protected:
			void func_pro();
	public:
			void func_pub();
};

void Base::func_pri()
{
	cout << "private" << endl;
}
void Base::func_pro()
{
	cout << "protected" << endl;
}
void Base::func_pub()
{
	cout << "public" << endl;
	this->func_pri();
}

class Derive:private Base
{
	public:
		void function();
};

void Derive::function()
{
	func_pro();
	func_pub();
}

class Derive_sec:public Derive
{
	public:
		void func_sec();
};

void Derive_sec::func_sec()
{
	//func_pub();調用時會產生錯誤
	//func_pro();調用時會產生錯誤
	//func_pri();調用這里時會產生錯誤
	function();
}

int main()
{
	Derive_sec* derive;
	derive=new Derive_sec;
	derive->func_sec();
	delete derive;
	return 0;
}

通過結果來看,Derive_sec類(子二代)對Base基類中private、protected和public的成員函數均不能調用,但其仍然可以調用子一代的公有函數。

總結

在三種模式的繼承中,我們可以看出當子一代設置為公有繼承/保護繼承基類時,子二代對基類protected、public成員變量可以訪問,而對private變量不可訪問;當子一代設置為私有繼承基類時,子二代對基類private、protected、public成員變量均不能訪問.
我們可以得出這樣的結論:當基類和派生類具有直接繼承關系時,按照上文所述繼承規則即可;若派生類是經過對基類的多重繼承得來的,則要考慮之前的繼承模式。
private繼承模式在對類之間的封裝性有要求時,可以考慮使用。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C++中的繼承模式有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

紫阳县| 乌拉特中旗| 陈巴尔虎旗| 苍南县| 宁阳县| 汉中市| 黎川县| 白朗县| 阿鲁科尔沁旗| 武强县| 舞阳县| 昌吉市| 辽宁省| 南宁市| 什邡市| 子长县| 天峻县| 阿坝县| 青川县| 湖北省| 芦溪县| 东海县| 托克托县| 阜宁县| 泾川县| 江北区| 勐海县| 莱州市| 五台县| 延安市| 亳州市| 红桥区| 大冶市| 社会| 诏安县| 玉溪市| 成武县| 黑水县| 宽甸| 土默特右旗| 乳源|