1樓:皇家救星
虛擬函式可以實現多型,過載不行
多型就是用同一個呼叫方式實現不同呼叫
比如,你定義了一個名為形狀的父類,裡面有一個計算面積的虛擬函式。並且派生了兩個子類,一個是圓,一個是方形,各自實現了自己的計算面積函式
這樣,你想要計算面積的時候,並不需要考慮圓和方形的區別。只需要 父類.計算面積 這樣呼叫,編譯系統會自動幫你選擇用圓的計算面積,或是用方形的計算面積
2樓:匿名使用者
這都是在繼
承的類中用到的。
在繼承的類中有函式定義和父類中的函式定義重複,就是override,過載
在把一個子類的物件定義給父類的變數的時候,對於同一個函式名的函式,c++將應用那個父類的函式定義。
如果父類的這個函式被定義為virtual,將會呼叫子類的。
class a
};class b : public a
返回this is a.
如果class a
};返回this is b.
c++中 虛擬函式與純虛擬函式的區別是什麼?
3樓:月無痕
虛擬函式與純虛擬函式 在他們的子類中都可以被重寫。它們的區別是:
(1)純虛擬函式只有定義,沒有實現;而虛擬函式既有定義,也有實現的**。
純虛擬函式一般沒有**實現部分,如
virtual void print() = 0;
而一般虛擬函式必須要有**的實現部分,否則會出現函式未定義的錯誤。
virtual void print()
(2)包含純虛擬函式的類不能定義其物件,而包含虛擬函式的則可以。
c++中虛擬函式必須有定義嗎?
4樓:呵呵
需要例項化類的虛擬函式必須有定義,而僅僅定義帶有虛擬函式的類且虛擬函式沒有實現,該類編譯是可以通過的!
純虛擬函式出現在介面類中,並賦值為0,不要為該函式分配函式地址,從而阻止類的例項化!純虛擬函式是沒有定義的,如果實現了也不是純虛擬函式啦!
一般的成員函式可以只有宣告,前提是在應用中不能呼叫該函式,否則會因找不到定義產生連線錯誤!
請問C 中成員函式在類裡面定義和在類外定義有什麼區別
效能來說沒啥區別。不過放在類外,的定義和實現分開,有利於 封轉,別人需要呼叫你的介面的時候,你可以只給他標頭檔案,的實現自己留著。在類裡定義時,這種函式會被編譯器編譯成行內函數,在類外定義的函式則不會。行內函數的好處是加快程式的執行速度,缺點是會增加程式的尺寸。比較推薦的寫法是把一個經常要用的而且實...
C虛擬函式和純虛擬函式的區別,c中虛擬函式與純虛擬函式的區別是什麼?
虛擬函式與純虛擬函式 在他們的子類中都可以被重寫。它們的區別是 1 純虛擬函式只有定義,沒有實現 而虛擬函式既有定義,也有實現的 純虛擬函式一般沒有 實現部分,如 virtual void print 0 而一般虛擬函式必須要有 的實現部分 c 中 虛擬函式與純虛擬函式的區別是什麼?虛擬函式與純虛擬...
虛擬函式和虛基類的區別是什麼啊,c 中虛擬函式與純虛擬函式的區別是什麼?
虛擬函式 虛基類,它們都和virtual有關,這兩個帶有虛字的定義容易使人混淆,回下面先從作用答 上來解釋這兩個定義的區別 1.虛擬函式是用於多型中virtual修飾父類函式,確保父類指標呼叫子類物件時,執行子類函式的。2 虛基類是用來在多繼承中,如果父類繼承自同一個父類,就只例項化一個父類 說的有...