解釋C++的Virtual函數


我:虛函數是C++實現多態的一種方式,基類的函數被聲明為virtual后,派生類可以根據需要重寫基類中的虛函數,實現同一調用方式實現不同效果。如果基類中的函數被聲明為純虛函數,該基類就變成一個抽象類,則派生類必須重寫該純虛函數。

 

書本解釋:

C++在調用函數的時候,會把該調用與合適的函數定義相匹配,這種匹配發生在編譯器,也稱為靜態綁定

也可以告訴編譯器,把函數調用與函數定義之間的匹配放到運行期去做,稱為動態綁定

如果使用了virtual,則編譯器會對該函數做動態綁定。

 

靜態綁定:

#include <iostream>
using namespace std;
class A
{
public:
void f()
{
cout<<"Base class A"<<endl;
}
};
class B :public A
{
public:

void f()
{
cout<<"Class B"<<endl;
}
};

void g(A &arg)
{
arg.f();
}

int main()
{
B x;
g(x);//g函數的參數是A類,傳入的是B類
return 0;
}

執行函數g()時,雖然其參數所指的對象是B類型,但實際被調用的卻是A類里的f();

因為編譯器在編譯期只知道g()函數的參數所引用的那個對象其類型派生自A類,但是它並不清楚這個類型究竟是A還是B。

 

動態綁定:

把A類中的void f()函數加上virtual聲明

那么函數就會調用到B類的f();在運行期確定要調用的函數,可以明確的知道參數是B類。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM