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

C++中重載、重寫(覆蓋)和隱藏的區(qū)別實(shí)例分析

 更新時(shí)間:2014年08月23日 10:54:52   投稿:shichen2014  
這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下

本文實(shí)例講述了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,對(duì)于C++面向?qū)ο蟪绦蛟O(shè)計(jì)來(lái)說(shuō)是非常重要的概念。具體分析如下:

1.重載:重載從overload翻譯過來(lái),是指同一可訪問區(qū)內(nèi)被聲明的幾個(gè)具有不同參數(shù)列(參數(shù)的類型,個(gè)數(shù),順序不同)的同名函數(shù),根據(jù)參數(shù)列表確定調(diào)用哪個(gè)函數(shù),重載不關(guān)心函數(shù)返回類型。

示例代碼如下:

class A{
public:
  void test(int i);
  void test(double i);
  void test(int i, double j);
  void test(double i, int j);
  int test(int i);         //錯(cuò)誤,非重載
};

前四個(gè)互為重載函數(shù),最后一個(gè)和第一個(gè)不是重載函數(shù)。

2.隱藏:隱藏是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù)。注意只要同名函數(shù),不管參數(shù)列表是否相同,基類函數(shù)都會(huì)被隱藏。

實(shí)例代碼如下:

#include<iostream>
using namespace std;
class A{
public:
  void fun1(int i, int j){
    cout << "A::fun1() : " << i << " " << j << endl;
  }

};
class B : public A{
public:
    //隱藏
  void fun1(double i){
    cout << "B::fun1() : " << i << endl;
  }
};
int main(){
  B b;
    b.fun1(5);          //調(diào)用B類中的函數(shù)
  b.fun1(1, 2);        //出錯(cuò),因?yàn)榛惡瘮?shù)被隱藏
  system("pause");
  return 0;
}    

3.重寫:重寫翻譯自override,也翻譯成覆蓋(更好一點(diǎn)),是指派生類中存在重新定義的函數(shù)。其函數(shù)名,參數(shù)列表,返回值類型,所有都必須同基類中被重寫的函數(shù)一致。只有函數(shù)體不同(花括號(hào)內(nèi)),派生類調(diào)用時(shí)會(huì)調(diào)用派生類的重寫函數(shù),不會(huì)調(diào)用被重寫函數(shù)。重寫的基類中被重寫的函數(shù)必須有virtual修飾。

實(shí)例代碼如下:

#include<iostream>
using namespace std;
class A{
public:
  virtual void fun3(int i){
    cout << "A::fun3() : " << i << endl;
  }

};
class B : public A{
public:
    //重寫
  virtual void fun3(double i){
    cout << "B::fun3() : " << i << endl;
  }
};
int main(){
    A a;
  B b;
  A * pa = &a;
  pa->fun3(3);
  pa = &b;
  pa->fun3(5);
  system("pause");
  return 0;
}

上面為虛函數(shù)實(shí)現(xiàn)多態(tài)的代碼,不明白的先看虛函數(shù)實(shí)現(xiàn)多態(tài)的原理。

重載和重寫的區(qū)別:

(1)范圍區(qū)別:重寫和被重寫的函數(shù)在不同的類中,重載和被重載的函數(shù)在同一類中。

(2)參數(shù)區(qū)別:重寫與被重寫的函數(shù)參數(shù)列表一定相同,重載和被重載的函數(shù)參數(shù)列表一定不同

(3)virtual的區(qū)別:重寫的基類必須要有virtual修飾,重載函數(shù)和被重載函數(shù)可以被virtual修飾,也可以沒有。

隱藏和重寫,重載的區(qū)別:

(1)與重載范圍不同:隱藏函數(shù)和被隱藏函數(shù)在不同類中。

(2)參數(shù)的區(qū)別:隱藏函數(shù)和被隱藏函數(shù)參數(shù)列表可以相同,也可以不同,但函數(shù)名一定同;當(dāng)參數(shù)不同時(shí),無(wú)論基類中的函數(shù)是否被virtual修飾,基類函數(shù)都是被隱藏,而不是被重寫。

調(diào)試運(yùn)行如下代碼:

#include<iostream>
using namespace std;
class A{
public:
  void fun1(int i, int j){
    cout << "A::fun1() : " << i << " " << j << endl;
  }
  void fun2(int i){
    cout << "A::fun2() : " << i << endl;
  }
  virtual void fun3(int i){
    cout << "A::fun3(int) : " << i << endl;
  }
};
class B : public A{
public:
    //隱藏
  void fun1(double i){
    cout << "B::fun1() : " << i << endl;
  }
    //重寫
  void fun3(int i){
    cout << "B::fun3(int) : " << i << endl;
  }
    //隱藏
  void fun3(double i){
    cout << "B::fun3(double) : " << i << endl;
  }
};
int main(){
  B b;
  A * pa = &b;
  B * pb = &b;
  pa->fun3(3);        //重寫,多態(tài)性,調(diào)用B的函數(shù)
  b.fun3(10);         //隱藏,調(diào)用B的函數(shù)
  pb->fun3(20);       //隱藏,調(diào)用B的函數(shù)
  system("pause");
  return 0;
}

輸出結(jié)果為:

B::fun3(int) : 3
B::fun3(int) : 10
B::fun3(int) : 20
請(qǐng)按任意鍵繼續(xù). . .

希望本文所述對(duì)大家C++面向?qū)ο蟪绦蛟O(shè)計(jì)有所幫助。

相關(guān)文章

  • C++11的新特性簡(jiǎn)單匯總介紹 (一)

    C++11的新特性簡(jiǎn)單匯總介紹 (一)

    本文將對(duì)C++11的以上新特性進(jìn)行簡(jiǎn)單的講解,以便大家能夠快速了解到C++11對(duì)C++的易用性方面祈禱的巨大作用。
    2016-07-07
  • Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例

    Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例

    有時(shí)候在登錄界面需要驗(yàn)證碼功能,這樣能夠防止被惡意程序攻擊,本文主要介紹了Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 項(xiàng)目之C++如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池

    項(xiàng)目之C++如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池

    這篇文章主要介紹了項(xiàng)目之C++如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C語(yǔ)言實(shí)現(xiàn)520表白代碼 祝你表白成功!

    C語(yǔ)言實(shí)現(xiàn)520表白代碼 祝你表白成功!

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)520表白代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++實(shí)現(xiàn)LeetCode(128.求最長(zhǎng)連續(xù)序列)

    C++實(shí)現(xiàn)LeetCode(128.求最長(zhǎng)連續(xù)序列)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(128.求最長(zhǎng)連續(xù)序列),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 一文詳解C++中的智能指針避坑指南

    一文詳解C++中的智能指針避坑指南

    你以為將new替換為make_shared就萬(wàn)事大吉嗎,真相是智能指針的陷阱比手動(dòng)管理更隱蔽更危險(xiǎn),本文將深入剖析循環(huán)引用,性能陷阱和線程安全,希望對(duì)大家有所幫助
    2025-12-12
  • C++虛繼承原理與類布局深度分析

    C++虛繼承原理與類布局深度分析

    這篇文章主要介紹了C++虛繼承原理與類布局分析,本文的目標(biāo)是探究虛繼承的實(shí)現(xiàn)方式和類布局(Class Layout)的具體規(guī)則,需要的朋友可以參考下
    2024-04-04
  • opencv實(shí)現(xiàn)像素統(tǒng)計(jì)的示例代碼

    opencv實(shí)現(xiàn)像素統(tǒng)計(jì)的示例代碼

    本文介紹了OpenCV中統(tǒng)計(jì)圖像像素信息的常用方法和函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • C語(yǔ)言中case穿透現(xiàn)象的解析

    C語(yǔ)言中case穿透現(xiàn)象的解析

    case穿透是一個(gè)既實(shí)用又容易引發(fā)錯(cuò)誤的特性,下面就來(lái)介紹一下case 穿透的原理、應(yīng)用場(chǎng)景、注意事項(xiàng)及如何避免常見錯(cuò)誤,感興趣的可以了解一下
    2025-06-06
  • C++對(duì)象內(nèi)存分布詳解(包括字節(jié)對(duì)齊和虛函數(shù)表)

    C++對(duì)象內(nèi)存分布詳解(包括字節(jié)對(duì)齊和虛函數(shù)表)

    下面小編就為大家?guī)?lái)一篇C++對(duì)象內(nèi)存分布詳解(包括字節(jié)對(duì)齊和虛函數(shù)表)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-12-12

最新評(píng)論

加查县| 广东省| 铜山县| 成都市| 田林县| 龙南县| 桐乡市| 濮阳县| 梨树县| 香河县| 寿阳县| 城固县| 铁岭县| 神木县| 武陟县| 筠连县| 定襄县| 汨罗市| 宝兴县| 和硕县| 车险| 崇阳县| 黄大仙区| 绥化市| 友谊县| 齐河县| 建平县| 高邑县| 泸水县| 惠来县| 桦川县| 和龙市| 如东县| 西吉县| 龙游县| 绍兴县| 弥勒县| 秦安县| 大洼县| 钦州市| 牟定县|