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

C++中的繼承模式深入詳解

 更新時間:2021年03月22日 15:32:41   作者:愛吃甜甜圈の醬  
這篇文章主要介紹了C++中的繼承模式深入詳解。繼承是OOP設計中的重要概念。在C++語言中,派生類繼承基類有三種繼承方式:私有繼承(private)、保護繼承(protected)和公有繼承(public)。

前言

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

一、繼承規(guī)則

繼承是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();調(diào)用private成員會產(chǎn)生編譯錯誤
	func_pro();
	func_pub();
}

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

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


友元函數(shù)一直比較有爭議,有人認為它在一定程度上破壞了類的封裝性。關于友元函數(shù)的學習文章醬會在后續(xù)發(fā)出。

二、繼承類型

首先要確立一個概念:無論是公有、私有還是保護繼承,說到底它們都屬于繼承,滿足繼承的基本規(guī)則(如上表)。無論是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();調(diào)用這里時會產(chǎn)生錯誤
}

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

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

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();調(diào)用時會產(chǎn)生錯誤
	//func_pro();調(diào)用時會產(chǎn)生錯誤
	//func_pri();調(diào)用這里時會產(chǎn)生錯誤
	function();
}

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

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

總結

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

到此這篇關于C++中的繼承模式深入詳解的文章就介紹到這了,更多相關C++中的繼承模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言聯(lián)合體的實現(xiàn)示例

    C語言聯(lián)合體的實現(xiàn)示例

    C語言聯(lián)合體是一種特殊的數(shù)據(jù)結構,它允許在相同的內(nèi)存位置存儲不同的數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • 淺談C語言中的指針和數(shù)組有什么區(qū)別

    淺談C語言中的指針和數(shù)組有什么區(qū)別

    C語言中的指針和數(shù)組是兩個重要的數(shù)據(jù)結構,它們在內(nèi)存管理和數(shù)據(jù)存儲方面有許多相似之處,但也存在一些關鍵的區(qū)別,本文就來介紹一下C語言中的指針和數(shù)組有什么區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • C++中std::shuffle的使用小結

    C++中std::shuffle的使用小結

    std::shuffle是C++標準庫中的一個函數(shù),用于對容器中的元素進行隨機排列,本文主要介紹了C++中std::shuffle的使用小結,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • C++ Qt開發(fā)之CheckBox多選框組件的用法詳解

    C++ Qt開發(fā)之CheckBox多選框組件的用法詳解

    Qt是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹CheckBox單行輸入框組件的使用方法,需要的朋友可以參考下
    2023-12-12
  • C++中菱形繼承的解釋與處理詳解

    C++中菱形繼承的解釋與處理詳解

    菱形繼承是多重繼承中跑不掉的,Java拿掉了多重繼承,輔之以接口。C++中雖然沒有明確說明接口這種東西,但是只有純虛函數(shù)的類可以看作Java中的接口,下面這篇文章主要給大家介紹了關于C++中菱形繼承的解釋與處理的相關資料,需要的朋友可以參考下
    2022-02-02
  • 用C++的odeint庫求解微分方程

    用C++的odeint庫求解微分方程

    求解微分方程的數(shù)值解一般使用MATLAB等數(shù)值計算軟件,其實C++也可以求解微分方程,需要用到odeint庫,它是boost庫的一部分。官方教程和示例比較晦澀,本文力求用較短的篇幅介紹它的基本用法,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • 基于C++ OpenCV制作電子相冊查看器

    基于C++ OpenCV制作電子相冊查看器

    這篇文章主要介紹了如何使用OpenCV C++ 制作電子相冊查看器。類似于win10系統(tǒng)的“照片”功能。感興趣的小伙伴可以跟隨小編一起學習一下
    2022-01-01
  • 詳解計數(shù)排序算法及C語言程序中的實現(xiàn)

    詳解計數(shù)排序算法及C語言程序中的實現(xiàn)

    技術排序算法與我們普通接觸的冒泡排序和快速排序等基于元素比較的算法不同,在編程中通過C語言的數(shù)組能夠清除地表達出來,這里我們就來詳解計數(shù)排序算法及C語言程序中的實現(xiàn)
    2016-07-07
  • Qt 中 isHidden 和 isVisible 的區(qū)別與使用小結

    Qt 中 isHidden 和 isVisible 的區(qū)別與使用小結

    Qt 中的 isHidden() 和 isVisible() 方法都用于查詢組件顯示或隱藏狀態(tài),然而,它們有很大的區(qū)別,了解它們對于正確操作組件致關重要,下面給大家介紹Qt 中 isHidden 和 isVisible 的區(qū)別與使用,感興趣的朋友一起看看吧
    2025-03-03
  • C++實現(xiàn)職工信息管理系統(tǒng)

    C++實現(xiàn)職工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了c++實現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

张掖市| 收藏| 巴南区| 民权县| 泸州市| 香河县| 深泽县| 河北省| 南丰县| 会宁县| 唐山市| 循化| 望江县| 仙居县| 平邑县| 阳东县| 郁南县| 广州市| 封丘县| 牡丹江市| 威海市| 新巴尔虎右旗| 永嘉县| 合水县| 罗平县| 博兴县| 南投县| 天等县| 温宿县| 福清市| 女性| 莒南县| 洛川县| 阜南县| 呈贡县| 蓬莱市| 喀什市| 夏津县| 津市市| 久治县| 新民市|