亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

一、繼承規(guī)則

繼承是C++中的重要特性,派生類可以訪問(wèn)基類中的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成員會(huì)產(chǎn)生編譯錯(cuò)誤
	func_pro();
	func_pub();
}

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

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


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

二、繼承類型

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

1.保護(hù)繼承

先上代碼:

#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)用這里時(shí)會(huì)產(chǎn)生錯(cuò)誤
}

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

這段代碼運(yùn)行后的結(jié)果是public protected。
可以看出的是Derive_sec類(子二代)可以調(diào)用的是Base基類的protected和public成員函數(shù),而無(wú)法調(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)用時(shí)會(huì)產(chǎn)生錯(cuò)誤
	//func_pro();調(diào)用時(shí)會(huì)產(chǎn)生錯(cuò)誤
	//func_pri();調(diào)用這里時(shí)會(huì)產(chǎn)生錯(cuò)誤
	function();
}

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

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

總結(jié)

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

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

相關(guān)文章

  • C語(yǔ)言超詳細(xì)講解getchar函數(shù)的使用

    C語(yǔ)言超詳細(xì)講解getchar函數(shù)的使用

    C 庫(kù)函數(shù) int getchar(void) 從標(biāo)準(zhǔn)輸入 stdin 獲取一個(gè)字符(一個(gè)無(wú)符號(hào)字符)。這等同于 getc 帶有 stdin 作為參數(shù),下面讓我們?cè)敿?xì)來(lái)看看
    2022-05-05
  • C++?解決求兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)問(wèn)題

    C++?解決求兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)問(wèn)題

    本文主要介紹了利用C++實(shí)現(xiàn)輸入兩個(gè)無(wú)環(huán)的單向鏈表時(shí),找出它們的第一個(gè)公共結(jié)點(diǎn)的問(wèn)題。文章中的示例代碼簡(jiǎn)潔易懂,感興趣的同學(xué)可以和小編一起學(xué)習(xí)一下
    2021-12-12
  • c語(yǔ)言獲取文件大小的示例

    c語(yǔ)言獲取文件大小的示例

    在C語(yǔ)言中測(cè)試文件的大小,主要使用二個(gè)標(biāo)準(zhǔn)函數(shù),下面是使用示例,需要的朋友可以參考下
    2014-02-02
  • C/C++中使用列表框組件Qt?ListWidget

    C/C++中使用列表框組件Qt?ListWidget

    本文詳細(xì)講解了C/C++中使用列表框組件Qt?ListWidget的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • Ubuntu20.04安裝使用jsoncpp、json-c庫(kù)的方法實(shí)例

    Ubuntu20.04安裝使用jsoncpp、json-c庫(kù)的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Ubuntu20.04安裝使用jsoncpp、json-c庫(kù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作就有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-04-04
  • C++利用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的方法

    C++利用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的方法

    這篇文章主要給大家介紹了關(guān)于C++利用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C++的運(yùn)算符你真的了解嗎

    C++的運(yùn)算符你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的運(yùn)算符,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++異常重拋出實(shí)例分析

    C++異常重拋出實(shí)例分析

    在本文里小編給大家分享的是關(guān)于C++異常重拋出實(shí)例分析,有興趣點(diǎn)朋友們可以跟著學(xué)習(xí)下。
    2020-05-05
  • Qt讀寫ini文件的方法詳解(含源碼+注釋)

    Qt讀寫ini文件的方法詳解(含源碼+注釋)

    .ini文件是Initialization?File的縮寫,即初始化文件,下面這篇文章主要給大家介紹了關(guān)于Qt讀寫ini文件(含源碼+注釋)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 詳解C++中賦值,關(guān)系,函數(shù)調(diào)用運(yùn)算符重載的實(shí)現(xiàn)

    詳解C++中賦值,關(guān)系,函數(shù)調(diào)用運(yùn)算符重載的實(shí)現(xiàn)

    本文主要為大家講解一下三個(gè)C++中的運(yùn)算符重載,分別是賦值運(yùn)算符重載、關(guān)系運(yùn)算符重載和函數(shù)調(diào)用運(yùn)算符重載,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06

最新評(píng)論