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

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

 更新時間:2014年08月23日 10:54:52   投稿:shichen2014  
這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向對象程序設計非常重要的概念,需要的朋友可以參考下

本文實例講述了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,對于C++面向對象程序設計來說是非常重要的概念。具體分析如下:

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

示例代碼如下:

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);         //錯誤,非重載
};

前四個互為重載函數,最后一個和第一個不是重載函數。

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

實例代碼如下:

#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);          //調用B類中的函數
  b.fun1(1, 2);        //出錯,因為基類函數被隱藏
  system("pause");
  return 0;
}    

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

實例代碼如下:

#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;
}

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

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

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

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

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

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

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

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

調試運行如下代碼:

#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)性,調用B的函數
  b.fun3(10);         //隱藏,調用B的函數
  pb->fun3(20);       //隱藏,調用B的函數
  system("pause");
  return 0;
}

輸出結果為:

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

希望本文所述對大家C++面向對象程序設計有所幫助。

相關文章

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

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

    本文將對C++11的以上新特性進行簡單的講解,以便大家能夠快速了解到C++11對C++的易用性方面祈禱的巨大作用。
    2016-07-07
  • Qt使用隨機驗證碼的實現示例

    Qt使用隨機驗證碼的實現示例

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

    項目之C++如何實現數據庫連接池

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

    C語言實現520表白代碼 祝你表白成功!

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

    C++實現LeetCode(128.求最長連續(xù)序列)

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

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

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

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

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

    opencv實現像素統計的示例代碼

    本文介紹了OpenCV中統計圖像像素信息的常用方法和函數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • C語言中case穿透現象的解析

    C語言中case穿透現象的解析

    case穿透是一個既實用又容易引發(fā)錯誤的特性,下面就來介紹一下case 穿透的原理、應用場景、注意事項及如何避免常見錯誤,感興趣的可以了解一下
    2025-06-06
  • C++對象內存分布詳解(包括字節(jié)對齊和虛函數表)

    C++對象內存分布詳解(包括字節(jié)對齊和虛函數表)

    下面小編就為大家?guī)硪黄狢++對象內存分布詳解(包括字節(jié)對齊和虛函數表)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論

潍坊市| 石景山区| 贵南县| 佛冈县| 棋牌| 沁水县| 孟村| 航空| 息烽县| 安龙县| 开江县| 卓资县| 朝阳县| 五家渠市| 宿迁市| 潞西市| 龙陵县| 岳阳市| 嘉兴市| 定日县| 苍南县| 色达县| 枣庄市| 深泽县| 绿春县| 文登市| 开鲁县| 望谟县| 环江| 邵东县| 明水县| 菏泽市| 社会| 磐安县| 扶风县| 柳河县| 秭归县| 临夏市| 勃利县| 佛冈县| 灌阳县|