程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++虛函數探討(三)

C++虛函數探討(三)

編輯:C++入門知識

 

環境:VS2010

代碼:

 

#include <iostream> 

using namespace std; 

 

 

class A{ 

public: 

    virtual void func1(int i){ 

    cout <<"A::func1()"<<endl; 

    }  

    virtual int func2(float f){ 

    cout <<"A::func2()"<<endl; 

    return 0; 

    } 

}; 

 

class B:public A{ 

    virtual void func1(int i){ 

    cout <<"B::func1()"<<endl; 

    }  

    virtual int func2(int i){ 

    cout <<"B::func2()"<<endl; 

    return 0; 

    } 

}; 

 

int main(void){ 

   B b; 

   A *p = &b; 

 

   p->func1(0); 

   p->func2(0); 

   return 0; 

 

 

讀者可以考慮輸出結果。

www.2cto.com

運行效果截圖:

\

 

分析:指針p是指向派生類的基類指針,派生類B裡的fun2:virtual int func2(int i),基類A裡的func2:virtual int func2(float f),仔細觀察它們的參數類型不一致,自然p->func2(0);這句話的輸出是基類的虛函數的內容,即使它傳的參數是int型(匹配到基類的虛函數後,參數自動轉換成float)。

總結:若要是虛函數的機制有效,則派生類的虛函數必須和基類的虛函數完成一致(當然從基類繼承的派生類裡的虛函數可以不加virtual)

 

 


作者 Wentasy

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved