程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++ 結構函數中調用虛函數的完成辦法

c++ 結構函數中調用虛函數的完成辦法

編輯:關於C++

c++ 結構函數中調用虛函數的完成辦法。本站提示廣大學習愛好者:(c++ 結構函數中調用虛函數的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是c++ 結構函數中調用虛函數的完成辦法正文


我們知道:C++中的多態使得可以依據對象的真實類型(靜態類型)調用不同的虛函數。這種調用都是對象曾經構建完成的狀況。那假如在結構函數中調用虛函數,會怎樣樣呢?

有這麼一段代碼:

class A
{
public:
  A ():m_iVal(0){test();}
  virtual void func() { std::cout<<m_iVal<<‘ ';}
  void test(){func();}
public:
int m_iVal;
};
class B : public A
{
public:
  B(){test();};
  virtual void func()
  {
    ++m_iVal;
    std::cout<<m_iVal<<‘ ';
}
};
int main(int argc ,char* argv[])
{
  A*p = new B;
  p->test();
  return 0;
}

輸入: 0 1 2

也就是說,在結構函數中調用虛函數,調用的是正在結構的類中的虛函數,而不是子類的虛函數。

理一下順序。new了一個B對象,首先要調用基類結構函數,也就是A類的結構函數。調用test(),再調用虛函數func(),這時分用的是基類版本。之後再調用子類B的結構函數,這時調用的是子類虛函數func()。至於最後一次調用func(),依據多態,調用的是真實虛函數。

以上就是為大家帶來的c++ 結構函數中調用虛函數的完成辦法全部內容了,希望大家多多支持~

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