C++中虛函數(virtual function) 的 使用範圍

來源:互聯網
上載者:User

虛函數(virtual function) 在 基函數(base function) 和 派生函數(derived function) 之間可以覆寫(override);

如果派生函數有與虛函數同名的函數, 則會隱藏虛函數, 但是虛函數還會在;

由於派生對象和基底物件可以轉換, 可以只使用基底物件部分; 派生對象的虛函數會覆寫基底物件的虛函數;

代碼:

/*  * cppprimer.cpp  *  *  Created on: 2013.11.13  *      Author: Caroline  */      /*eclipse cdt, gcc 4.7.1*/      #include <iostream>        class Base {  public:      virtual int fcn () { //虛函數          std::cout << "This base class [int fcn()]. " << std::endl;          return 0;      }  };  /*更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/*/class D1 : public Base {  public:      int fcn (int) { //與基類的參數不同, 不是重載虛函數          std::cout << "This derived 1 class [int fcn(int)]. " << std::endl;          return 0;      }      virtual void f2 () { //虛函數          std::cout << "This derived 1 class [f2()]. " << std::endl;      }  };  class D2 : public D1 {  public:      int fcn (int) { //隱藏基函數的同名函數          std::cout << "This derived 2 class [int fcn(int)]. " << std::endl;          return 0;      }      int fcn () { //重載基類的虛函數          std::cout << "This derived 2 class [int fcn()]. " << std::endl;          return 0;      }      void f2 () {          std::cout << "This derived 2 class [f2()]. " << std::endl;      }  };        int main (void) {            Base bobj;      D1 d1obj;      D2 d2obj;            Base *bp1 = &bobj, *bp2 = &d1obj, *bp3 = &d2obj;      bp1->fcn();      bp2->fcn(); //未找到重載版本, 則使用基函數版本      bp3->fcn(); //D2使用的是重載版本            D1 *d1p = &d1obj;      D2 *d2p = &d2obj;      d1p->f2();      d2p->f2();            D1 *p1 = &d2obj;      D2 *p2 = &d2obj;      p1->fcn(10);      p2->fcn(10);            return 0;        }

輸出:

This base class [int fcn()].   This base class [int fcn()].   This derived 2 class [int fcn()].   This derived 1 class [f2()].   This derived 2 class [f2()].   This derived 1 class [int fcn(int)].   This derived 2 class [int fcn(int)].

作者:csdn部落格 Spike_King

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。