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

C++填坑的重寫,重載和隱藏的詳解

 更新時(shí)間:2021年09月18日 10:24:15   作者:面向大象編程  
這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助

重寫

  • 重寫的定義重寫發(fā)生在基類和派生類的繼承關(guān)系之中,被定義為虛函數(shù)的基類成員函數(shù),由派生類進(jìn)行重新定義和實(shí)現(xiàn),同時(shí)隱藏掉基類的方法(即派生類調(diào)用該重寫方法時(shí),會(huì)使用派生類重定義的方法,而非基類方法)。例如:
#include <iostream>
using std::cout;
using std::endl;
class Base
{
public:
	Base(){};
	~Base(){};
	virtual void fun() {cout << "Base class" << endl;}
};
class Derived : public Base
{
public:
	Derived(){};
	~Derived(){};
	void fun() override {cout << "Derived class" << endl;};
};
int main()
{
	Derived DerivedClass;
	Base BaseClass;
	DerivedClass.fun();
	BaseClass.fun();
}

輸出為:

Derived class
Base class

重寫的注意點(diǎn):

  • 重寫時(shí)父類需要將成員函數(shù)加上virtual關(guān)鍵字,子類在重寫的時(shí)候需要保證返回類型,參數(shù)個(gè)數(shù),參數(shù)類型一致
  • 重寫的成員函數(shù)訪問(wèn)修飾符可變,即父類在private中聲明的虛函數(shù),子類可以重寫為public
  • 可以使用協(xié)變返回類型進(jìn)行虛函數(shù)的重寫,將返回子類重寫時(shí)的會(huì)返回來(lái)類型

協(xié)變返回類型:在C++中,只要原來(lái)的返回類型是指向類的指針或引用,新的返回類型是指向派生類的指針或引用,覆蓋的方法就可以改變返回類型。這樣的類型稱為協(xié)變返回類型(Covariant returns type).

通俗的來(lái)講,原本重寫需要保證虛函數(shù)的返回類型相同,但是如果返回的類型時(shí)指針或者是引用,在保證該指針或者引用是具有繼承關(guān)系的情況下,重寫的虛函數(shù)可以返回子類的指針或者是引用,例如:

class Base
{
public:
	Base(){};
	~Base(){};
	virtual void fun() {cout << "Base class" << endl;}
	virtual Base* fun2() {return this;};
};
class Derived : public Base
{
public:
	Derived(){};
	~Derived(){};
	void fun() override {cout << "Derived class" << endl;};
	Derived* fun2() override {return this;};
};

派生類重寫了基類的fun2函數(shù),基類返回基類指針,派生類返回派生類指針。

重載

  • 重載的定義:重載指同一可訪問(wèn)區(qū)內(nèi)(代碼塊內(nèi))被聲明的幾個(gè)具有不同參數(shù)列表也即函數(shù)簽名(參數(shù)的類型,個(gè)數(shù),順序不同)的同名函數(shù),根據(jù)參數(shù)列表確定調(diào)用哪個(gè)函數(shù),重載不關(guān)心函數(shù)返回類型。例如:
int test();
int test(int a);
int test(int a,double b);
int test(double a,int a);
int test(string s);

需要注意的點(diǎn):

  • 重載只和函數(shù)簽名有關(guān),和函數(shù)的返回類型無(wú)關(guān)
  • 重載發(fā)生在統(tǒng)一作用域(代碼塊)中
  • 類中靜態(tài)函數(shù)可以和普通成員函數(shù)進(jìn)行重載
  • 重載多用于運(yùn)算符

隱藏

  • 隱藏的定義: 指不同作用域中定義的同名函數(shù)構(gòu)成隱藏(不要求函數(shù)返回值和函數(shù)參數(shù)類型相同)。比如派生類成員函數(shù)隱藏與其同名的基類成員函數(shù)、類成員函數(shù)隱藏全局外部函數(shù)。

隱藏比較簡(jiǎn)單粗暴,只要滿足在不同的作用域中,且名稱相同即可發(fā)生隱藏,例如類中成員函數(shù)隱藏全局函數(shù),派生類的成員函數(shù)隱藏基類成員函數(shù)。重寫是一種特殊的隱藏,重寫是動(dòng)態(tài)多態(tài)的一種體現(xiàn),會(huì)影響到虛表,虛指針等編譯和運(yùn)行時(shí)行為。

需要注意的點(diǎn):

  • 在函數(shù)查找時(shí),名字查找先于類型檢查
  • 只要滿足同名函數(shù)就可能會(huì)發(fā)生隱藏

總結(jié)

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

相關(guān)文章

  • C語(yǔ)言中的結(jié)構(gòu)體快排算法

    C語(yǔ)言中的結(jié)構(gòu)體快排算法

    這篇文章主要介紹了C語(yǔ)言中的結(jié)構(gòu)體快排算法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言順序表的實(shí)現(xiàn)代碼

    C語(yǔ)言順序表的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)順序表的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • C/C++ 中const關(guān)鍵字的用法小結(jié)

    C/C++ 中const關(guān)鍵字的用法小結(jié)

    C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性。這篇文章主要介紹了C/C++ 中const關(guān)鍵字的用法,需要的朋友可以參考下
    2020-02-02
  • C++中的運(yùn)算符重載詳解

    C++中的運(yùn)算符重載詳解

    大家好,本篇文章主要講的是C++中的運(yùn)算符重載詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 關(guān)于C語(yǔ)言指針賦值的問(wèn)題詳解

    關(guān)于C語(yǔ)言指針賦值的問(wèn)題詳解

    本篇文章是對(duì)C語(yǔ)言指針賦值的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法

    MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法

    這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的具體步驟與方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 詳解C++中的四種類型轉(zhuǎn)換運(yùn)算符

    詳解C++中的四種類型轉(zhuǎn)換運(yùn)算符

    隱式類型轉(zhuǎn)換是安全的,顯式類型轉(zhuǎn)換是有風(fēng)險(xiǎn)的,C語(yǔ)言之所以增加強(qiáng)制類型轉(zhuǎn)換的語(yǔ)法,就是為了強(qiáng)調(diào)風(fēng)險(xiǎn),讓程序員意識(shí)到自己在做什么,本文將給大家詳細(xì)介紹一下C++中的四種類型轉(zhuǎn)換運(yùn)算符,需要的朋友可以參考下
    2023-09-09
  • C語(yǔ)言強(qiáng)制類型轉(zhuǎn)換規(guī)則實(shí)例詳解

    C語(yǔ)言強(qiáng)制類型轉(zhuǎn)換規(guī)則實(shí)例詳解

    強(qiáng)制類型轉(zhuǎn)換是把變量從一種類型轉(zhuǎn)換為另一種數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言強(qiáng)制類型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • C語(yǔ)言 實(shí)現(xiàn)N階乘的程序代碼

    C語(yǔ)言 實(shí)現(xiàn)N階乘的程序代碼

    本篇文章是對(duì)c語(yǔ)言中實(shí)現(xiàn)N階乘的程序代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++?對(duì)象分配在棧上還是在堆上問(wèn)題分析

    c++?對(duì)象分配在棧上還是在堆上問(wèn)題分析

    這篇文章主要為大家介紹了c++?對(duì)象在棧上還是在堆上問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論

合山市| 西畴县| 沂源县| 四子王旗| 台北市| 赤城县| 浮山县| 陵川县| 游戏| 克山县| 隆尧县| 泰州市| 富裕县| 阳原县| 岚皋县| 巴东县| 昌图县| 贺兰县| 太保市| 桃源县| 郴州市| 新巴尔虎右旗| 乃东县| 东莞市| 乌兰察布市| 淮南市| 乌兰浩特市| 会宁县| 盐亭县| 南陵县| 元朗区| 特克斯县| 汝南县| 永德县| 应城市| 焉耆| 清涧县| 德庆县| 扬州市| 武定县| 南部县|