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

C++中的模板類繼承和成員訪問問題

 更新時(shí)間:2022年11月25日 10:15:24   作者:gtl_csdn  
這篇文章主要介紹了C++中的模板類繼承和成員訪問問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++模板類繼承和成員訪問

c++中聲明一個(gè)模板類及子類,在子類中如果需要訪問父類的protected變量,需要使用父類的類作用域限定符,否則會(huì)報(bào)“identifier not found”錯(cuò)誤。

例如:

template<typename T>
class A
{
protected:
?? ?int a;
};
?
template<typename T>
//模板的繼承,基類需要指定模板參數(shù)
class B : public A<T>
{
public:
?? ?void func()
?? ?{
? ? ? ? //此處必須使用A::a來訪問;否則會(huì)找不到a的定義
? ? ? ? //如果不是模板類,顯然可以直接使用a來訪問
?? ??? ?cout << A::a << endl;
?? ?}
};

模板函數(shù)的內(nèi)部類繼承時(shí),也是類似的。

例如:

template<typename T>
class outer
{
public:
?? ?class innerBase
?? ?{
?? ?protected:
?? ??? ?T a;
?? ?};
?
? ? //在模板類內(nèi)部繼承相同范圍內(nèi)的基類,基類能指定模板參數(shù)(內(nèi)部類默認(rèn)使用外部類的模板參數(shù))
? ? //如果繼承其他的模板類,則需要指定模板參數(shù);內(nèi)部類也可以定義自己的模板參數(shù)
?? ?class innerDrive : public innerBase
?? ?{
?? ?public:
?? ??? ?void func()
?? ??? ?{
? ? ? ? ? ? //此處必須使用innerBase::a(或者使用outer::innerBase::a)來訪問a
? ? ? ? ? ? //否則無法找到a的定義
?? ??? ??? ?cout << innerBase::a << endl;
?? ??? ?}
?? ?};
};

類、類模板的protected成員(受保護(hù))繼承規(guī)則

如下,為基類模板和派生類模板的繼承層次:

//基類模板
template<typename T>
class D0 {
protected:
	int testi;
	double testdouble;
};
//派生類模板
template<typename T>
class D1 :public D0 {
public:
	
};

編譯時(shí)報(bào)錯(cuò)如下:

原因是派生類只能繼承類,而不能繼承類模板,解決措施就是D0后添加模板類型參數(shù),如下:

//基類模板
template<typename T>
class D0 {
protected:
	int testi;
	double testdouble;
};
//派生類模板
template<typename T>
class D1 :public D0<T> {//修改處,D0后增加了<T>
public:
	
};

現(xiàn)在開始在派生類中使用繼承自基類的protected成員:

//基類模板
template<typename T>
class D0 {
protected:
	int testi;
	double testdouble;
};
//派生類模板
template<typename T>
class D1 :public D0<T> {
public:
	D1():testi(0) { }//添加了一行使用繼承自基類的protected成員的語句
};

編譯時(shí)報(bào)錯(cuò)如下:

原因在于,派生類只能訪問具體某個(gè)類的protected成員,不能訪問一個(gè)模板的protected成員。

testi未指定究竟是繼承自哪個(gè)類的protected成員,解決措施措施如下:

(1)如果想訪問的是繼承自D0類的testi成員,則修改如下:

//基類模板
template<typename T>
class D0 {
protected:
	int testi;
	double testdouble;
};
//派生類模板
template<typename T>
class D1 :public D0<T> {
public:
	D1():D0<int>::testi(0) { }//訪問繼承自D0<int>的protected成員
};

(2)如果是想訪問跟隨實(shí)例化D1的類型T,則修改如下:

//基類模板
template<typename T>
class D0 {
protected:
	int testi;
	double testdouble;
};
//派生類模板
template<typename T>
class D1 :public D0<T> {
public:
	D1():D0<T>::testi(0) { }//如果D1被實(shí)例化時(shí)為D1<int>,那么就訪問繼承自D0<int>的protected成員
							//如果D1被實(shí)例化時(shí)為D1<doublie>,那么就訪問繼承自D0<double>的protected成員
							//如果D1被實(shí)例化時(shí)為D1<string>,那么就訪問繼承自D0<string>的protected成員
							//…………………………………………
};

(2.1)也就是說T會(huì)跟隨實(shí)例化D1模板的類型而變化。

小結(jié)一下:

(1)派生類不能直接使用基類模板的protected成員,必須指定是使用

具體哪個(gè)基類的protected成員。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一篇文章帶你了解C語言操作符

    一篇文章帶你了解C語言操作符

    這篇文章主要以圖文結(jié)合的方式為大家詳細(xì)介紹了C語言操作符基礎(chǔ)知識(shí),感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-09-09
  • Qt 使用QDialog實(shí)現(xiàn)界面遮罩的示例(蒙版)

    Qt 使用QDialog實(shí)現(xiàn)界面遮罩的示例(蒙版)

    界面遮罩在很多時(shí)候都可以用到,例如彈窗,本文主要介紹了Qt 使用QDialog實(shí)現(xiàn)界面遮罩的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 基于C語言實(shí)現(xiàn)猜數(shù)字游戲

    基于C語言實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Qt讀寫ini文件之QSettings用法

    Qt讀寫ini文件之QSettings用法

    這篇文章主要為大家介紹了Qt讀寫ini文件之QSettings的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C/C++檢測文件是否存在的常見方法

    C/C++檢測文件是否存在的常見方法

    在C和C++中,檢測文件是否存在的方法通常涉及到平臺(tái)特定的API或者使用標(biāo)準(zhǔn)庫的功能(在C++17及以后版本中),本文給大家介紹了C/C++檢測文件是否存在的幾種常見方法,感興趣的小伙伴跟著小編一起來看看吧
    2024-06-06
  • C語言 全局變量和局部變量詳解及實(shí)例

    C語言 全局變量和局部變量詳解及實(shí)例

    這篇文章主要介紹了C語言 全局變量和局部變量詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++ 處理中文符號(hào)實(shí)例詳解

    C++ 處理中文符號(hào)實(shí)例詳解

    這篇文章主要介紹了C++ 處理中文符號(hào)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MFC實(shí)現(xiàn)字幕滾動(dòng)效果

    MFC實(shí)現(xiàn)字幕滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了MFC實(shí)現(xiàn)滾動(dòng)字幕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 利用Matlab制作抖音同款含褶皺面料圖

    利用Matlab制作抖音同款含褶皺面料圖

    這篇文章主要介紹了如何利用Matlab制作抖音的同款含褶皺面料圖,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • 基于樹莓派實(shí)現(xiàn)播放MP3音樂

    基于樹莓派實(shí)現(xiàn)播放MP3音樂

    這篇文章主要為大家詳細(xì)介紹了基于樹莓派實(shí)現(xiàn)播放MP3音樂,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論

兴和县| 静海县| 绍兴县| 龙州县| 藁城市| 大洼县| 自贡市| 莫力| 中江县| 罗城| 南丹县| 广南县| 大冶市| 麦盖提县| 尼木县| 固阳县| 东台市| 雷波县| 利津县| 东光县| 青海省| 绥德县| 三门峡市| 安龙县| 芦溪县| 浦东新区| 射阳县| 林周县| 万年县| 凌云县| 于田县| 喀什市| 岳阳县| 宁陵县| 宜章县| 慈利县| 大荔县| 鲁甸县| 珠海市| 棋牌| 龙井市|