c++虛函數與繼承的問題

來源:互聯網
上載者:User
#include <iostream>using namespace std; class A      {     protected:  int m_data;  public:       A(int data = 0){m_data = data;   }  int GetData(){return doGetData();}  virtual   int   doGetData(){  return m_data;/*m_data = 0 */}     //介面,如不直接調用,則調用衍生類別中實現他的函數 };          class B:public   A      {       protected:  int m_data;  public:       B(int data = 1){m_data = data;  }  //這裡 A 中的m_data = 0 ,B中的m_data = 1      int doGetData(){  return m_data ;/*m_data = 1 */}   //實現介面  };  class C:public B //C繼承了A&B類的方法&屬性,且未從新定義介面,故介面還是B類中定義的{       protected:  int m_data;  public:       C(int data = 2){m_data = data;  }  //這裡 A 中的m_data = 0 ,B中的m_data = 1,C 類中的m_data = 2};int main(){C c(10);cout<<c.GetData()<<endl;//本來是要調用C類的GetData(),C中未定義,故調用B中的,但是B中未定義,故調用A中的GetData(),因為A中的doGetData()是虛函數,所以調用//B類中的doGetData(),而B類的doGetData()返回B::m_data,故輸出 1cout<<c.A::GetData()<<endl;//因為A中的doGetData()是虛函數,又因為C類中未重定義該介面,所以調用B類中的doGetData(),而B類的doGetData()返回B::m_data,故輸出 1cout<<c.B::GetData()<<endl;//肯定返回 1 了cout<<c.C::GetData()<<endl;//因為C類中未重定義GetData(),故調用從B繼承來的GetData(),但是B類也未定義,所以調用A中的GetData(),因為A中的doGetData()是虛函數,所以調用B類中的doGetData(),而B類的doGetData()返回B::m_data,故輸出 1cout<<c.doGetData()<<endl;//肯定是B類的傳回值 1 了cout<<c.A::doGetData()<<endl;//因為直接調用了A的doGetData(),所以輸出 0 了cout<<c.B::doGetData()<<endl;//因為直接調用了B的doGetData(),所以輸出 1 了cout<<c.C::doGetData()<<endl;//因為C類中未重定義該介面,所以調用B類中的doGetData(),而B類的doGetData()返回B::m_data,故輸出 1system("PAUSE");return 0;}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

原文:http://www.programfan.com/CLUB/showpost.asp?id=21686

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.