欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

重寫

  • 重寫的定義重寫發(fā)生在基類和派生類的繼承關(guān)系之中,被定義為虛函數(shù)的基類成員函數(shù),由派生類進行重新定義和實現(xiàn),同時隱藏掉基類的方法(即派生類調(diào)用該重寫方法時,會使用派生類重定義的方法,而非基類方法)。例如:
#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

重寫的注意點:

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

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

通俗的來講,原本重寫需要保證虛函數(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ù),基類返回基類指針,派生類返回派生類指針。

重載

  • 重載的定義:重載指同一可訪問區(qū)內(nèi)(代碼塊內(nèi))被聲明的幾個具有不同參數(shù)列表也即函數(shù)簽名(參數(shù)的類型,個數(shù),順序不同)的同名函數(shù),根據(jù)參數(shù)列表確定調(diào)用哪個函數(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);

需要注意的點:

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

隱藏

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

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

需要注意的點:

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

總結(jié)

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

相關(guān)文章

  • Qt 添加MSVC2017編譯器的完整教程(保姆級)

    Qt 添加MSVC2017編譯器的完整教程(保姆級)

    本文主要介紹了Qt 添加MSVC2017編譯器的完整教程,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • c語言實現(xiàn)簡易版三子棋(附完整代碼)

    c語言實現(xiàn)簡易版三子棋(附完整代碼)

    大家好,本篇文章主要講的是c語言實現(xiàn)簡易版三子棋(附完整代碼),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++實現(xiàn)水仙花數(shù)判斷實例

    C++實現(xiàn)水仙花數(shù)判斷實例

    大家好,本篇文章主要講的是C++實現(xiàn)水仙花數(shù)判斷實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Windows安裝配置C/C++(VS2017)OpenSSL開發(fā)環(huán)境配置教程

    Windows安裝配置C/C++(VS2017)OpenSSL開發(fā)環(huán)境配置教程

    這篇文章主要為大家詳細介紹了Windows安裝配置C/C++,OpenSSL開發(fā)環(huán)境配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C++實現(xiàn)猜數(shù)字小游戲

    C++實現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • C++類中的常量介紹

    C++類中的常量介紹

    const數(shù)據(jù)成員只在某個對象生存期內(nèi)是常量,而對于整個類而言卻是可變的,因為類可以創(chuàng)建多個對象,不同的對象其const數(shù)據(jù)成員的值可以不同
    2013-10-10
  • 如何在C語言的宏中使用類型關(guān)鍵字

    如何在C語言的宏中使用類型關(guān)鍵字

    如何在C語言的宏中使用類型關(guān)鍵字呢?以下是實現(xiàn)方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++代碼規(guī)范之命名規(guī)則

    C++代碼規(guī)范之命名規(guī)則

    以下是對C++中的命名規(guī)則進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C語言static修飾函數(shù)詳細解析

    C語言static修飾函數(shù)詳細解析

    以下是對C語言中的static修飾函數(shù)進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 一篇文章帶你了解C語言的文件操作

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

    這篇文章主要為大家詳細介紹了C語言的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論