三個名字上很相近的概念,過載,覆蓋,重寫,
這裡主要是驗證一下覆蓋,子類的方法覆蓋父類的,分別是加和不加virtual。
class basevoid getdata() const
private:
int data;
};class sub : public base
void getdata() const
};
在下面**執行
base* pointer = new sub();
pointer->getdata();
結果是
base getdata
而如果是
class base
virtual void getdata() const
private:
int data;
};class sub : public base
void getdata() const
};
則結果是
sub getdata
也就是說,不加virtual的話,物件會從申明的物件中執行相應的方法,而如果加了virtual,則會執行實際指向的物件的方法。
原因,可以從虛函式表的角度考慮/
virtual 虛函式
virtual 虛函式 下面是對c 的虛函式這玩意兒的理解。一,什麼是虛函式 如果不知道虛函式為何物,但有急切的想知道,那你就應該從這裡開始 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進...
虛函式(virtual)
上面提到動態多型主要通過虛函式機制實現,這裡介紹以下虛函式。和普通的函式宣告方式相同,只要在函式的返回值前加上virtual關鍵字,該函式就為虛函式,即virtual 函式型別 函式名 形式引數 虛函式的作用 允許通過基類的指標或引用來訪問基類和派生類的同名函式。include using name...
關於virtual虛函式
1.如果父類定義的是普通virtual函式,1 父類必須提供乙個實現 2 子類如果不需要實現它,可以不在函式成員中列出來,或者類檔案中列出來,不提供實現也可以 子類如果要實現它,則必須在函式成員中列出來 2.如果父類定義的是純virtual函式 1 如果子類仍是個抽象類,可以不宣告它 2 如果子類不...