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

淺談C++重載、重寫、重定義

 更新時(shí)間:2016年06月08日 15:41:18   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談C++重載、重寫、重定義。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一、重載(overload)

指函數(shù)名相同,但是它的參數(shù)表列個(gè)數(shù)或順序,類型不同。但是不能靠返回類型來(lái)判斷。

(1)相同的范圍(在同一個(gè)作用域中) ;

(2)函數(shù)名字相同;

(3)參數(shù)不同;

(4)virtual 關(guān)鍵字可有可無(wú)。

(5)返回值可以不同;

二、重寫(也稱為覆蓋 override)

是指派生類重新定義基類的虛函數(shù),特征是:

(1)不在同一個(gè)作用域(分別位于派生類與基類) ;

(2)函數(shù)名字相同;

(3)參數(shù)相同;

(4)基類函數(shù)必須有 virtual 關(guān)鍵字,不能有 static 。

(5)返回值相同(或是協(xié)變),否則報(bào)錯(cuò);<—-協(xié)變這個(gè)概念我也是第一次才知道…

(6)重寫函數(shù)的訪問(wèn)修飾符可以不同。盡管 virtual 是 private 的,派生類中重寫改寫為 public,protected 也是可以的

三、重定義(也成隱藏)

(1)不在同一個(gè)作用域(分別位于派生類與基類) ;

(2)函數(shù)名字相同;

(3)返回值可以不同;

(4)參數(shù)不同。此時(shí),不論有無(wú) virtual 關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載以及覆蓋混淆) 。

(5)參數(shù)相同,但是基類函數(shù)沒有 virtual關(guān)鍵字。此時(shí),基類的函數(shù)被隱藏(注意別與覆蓋混淆) 。

#include <iostream>
#include <complex>
using namespace std;

class Base
{
public:
  virtual void a(int x)  {  cout << "Base::a(int)" << endl;   }
  // overload the Base::a(int) function
  virtual void a(double x) {  cout << "Base::a(double)" << endl;  }
  virtual void b(int x)  {  cout << "Base::b(int)" << endl;   }
  void c(int x)      {  cout << "Base::c(int)" << endl;   }
};

class Derived : public Base
{
public:
  // redefine the Base::a() function
  void a(complex<double> x)  {  cout << "Derived::a(complex)" << endl;   }
  // override the Base::b(int) function
  void b(int x)        {  cout << "Derived::b(int)" << endl;     }
  // redefine the Base::c() function
  void c(int x)        {  cout << "Derived::c(int)" << endl;     }
};

int main()
{
  Base b;
  Derived d;
  Base* pb = new Derived;
  // ----------------------------------- //
  b.a(1.0);               // Base::a(double)
  d.a(1.0);               // Derived::a(complex)
  pb->a(1.0);              // Base::a(double), This is redefine the Base::a() function
  // pb->a(complex<double>(1.0, 2.0));  // clear the annotation and have a try
  // ----------------------------------- //
  b.b(10);                // Base::b(int)
  d.b(10);                // Derived::b(int)
  pb->b(10);               // Derived::b(int), This is the virtual function
  // ----------------------------------- //
  delete pb;

  return 0;
}

通過(guò)這里可以看出:

1. Base類中的第二個(gè)函數(shù)a是對(duì)第一個(gè)的重載

2. Derived類中的函數(shù)b是對(duì)Base類中函數(shù)b的重寫,即使用了虛函數(shù)特性。

3. Derived類中的函數(shù)a是對(duì)Base淚中函數(shù)a的隱藏,即重定義了。

4.pb指針是一個(gè)指向Base類型的指針,但是它實(shí)際指向了一個(gè)Derived的空間,這里對(duì)pd調(diào)用函數(shù)的處理(多態(tài)性)取決于是否重寫 (虛函數(shù)特性)了函數(shù),若沒有,則依然調(diào)用基類。

5. 只有在通過(guò)基類指針或基類引用 間接指向派生類類型時(shí)多態(tài)性才會(huì)起作用。

6. 因?yàn)锽ase類的函數(shù)c沒有定義為virtual虛函數(shù),所以Derived類的函數(shù)c是對(duì)Base::c()的重定義。

以上這篇淺談C++重載、重寫、重定義就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

宁武县| 通江县| 荣成市| 双辽市| 阳东县| 岑巩县| 栖霞市| 光泽县| 芦溪县| 教育| 黄大仙区| 长兴县| 长治市| 巫溪县| 泰兴市| 武宣县| 屏东市| 南宁市| 万全县| 海晏县| 湖南省| 临潭县| 蕲春县| 措美县| 车险| 广州市| 铜川市| 伊金霍洛旗| 天水市| 大英县| 固原市| 富顺县| 台中市| 白河县| 喀喇沁旗| 津市市| 红原县| 穆棱市| 铜鼓县| 罗平县| 聂拉木县|