①virtual的作用:告訴編譯器不要靜態繫結virtual指定的函式,並且做好在執行時做好動態繫結的作用。
②虛函式宣告只能出現在類定義中的函式原型宣告;在類外定義
③內聯函式在編譯的時候是鏈結好的,所以virtual函式不可以用內聯函式定義
④虛表:每乙個有虛函式的物件有乙個虛表,虛表中存放著虛函式的入口位址,
當乙個指標指向的物件呼叫時,則該物件在虛表中查詢對應的函式,進行呼叫。
寫virtual虛析構函式,有利於動態申請的資源,容易釋放。
析構函式如果不是用虛函式,會導致記憶體洩漏,比如如下案例
base *b =new derived();
定義乙個基類指向派生類的型別時,如果fun()函式是一般函式,就會採用靜態繫結,此時釋放就會只呼叫基類的析構函式,而不呼叫派生的析構函式。
#include
using namespace std;
class base;}
;class derived:public base
~derived()
};void
fun(base *a)
intmain()
如何解以上問題呢?
在兩個析構函式前加上virtual
#include
using
namespace std;
class
base;}
;class
derived
:public base
virtual
~derived()
};intmain()
C 多型實現之虛方法
控制台應用程式中,新建乙個people類檔案,如下 using system using system.collections.generic using system.linq using system.text namespace 13多型 public string name 1.第一,將父類...
多型之虛方法
1.虛方法用到兩個關鍵字 virtual 和 override 當子類繼承與父類物件時,宣告乙個父類物件,通過在子類中重寫父類物件的方法,可以直接調到子類的方法 public class person set public person string name public virtual void...
C 虛方法 抽象方法
首先在c 中虛方法的定義 public virtual void virtualmethod 只要在方法名前加上virtual,就宣告了該方法為虛方法,注意宣告為虛方法後再不能加上abstract,static關鍵字宣告 以下是插入乙個例項來說明虛方法與非虛方法的不同 public class a ...