最近在學習c++,每次看到繼承這段的時候,總是一邊感慨這門語言的難度,一邊感慨這門語言的神奇之處。最近看到了建構函式這段,問了自己這樣乙個問題,建構函式可以是虛函式嗎?不是很清楚,於是去查了一些資料。
首先我覺得應該明確的乙個問題就是,虛函式的功能是c++中多型的一種實現方式。主要是繼承類的某些功能和基類的某些功能會在實現方式上不同,因此需要重新定義,而我們在呼叫的時候又希望不要去區分呼叫的是基類的還是繼承類的,於是產生了這樣的乙個機制。但是對於建構函式來說,卻不能夠定義成乙個虛函式,下面我們從下面兩個方面來說明之:
從儲存空間的角度:虛函式對應乙個虛函式表,而這個虛函式表是儲存在例項物件的記憶體中的。若建構函式是虛函式,那麼我們如果想呼叫建構函式,則必須先找到這個虛函式表,而此時例項還沒有建立成功,因此就不能夠找到建構函式。
從使用的角度來看,虛函式的主要作用就是在資訊不全的情形下,使得過載的函式得到對應的呼叫,建構函式本身就是要初始化例項,使用虛函式也沒有實際的意義,因此建構函式沒有必要時虛函式。
而與建構函式相對應的析構函式則不同,可以是虛函式。甚至在很多的情形下,析構函式最好能夠定義成虛函式,這樣在析構的時候,我們總是能夠呼叫到正確的析構函式。
C 之建構函式與析構函式
首先,在棧裡宣告兩個物件bs sc,看看編譯器是如何自動呼叫的。includeusing namespace std class base base 執行結果顯示 first construct in base second construct in base construct in subcla...
c 之建構函式與析構函式
建構函式 建構函式的原型和函式頭有乙個特徵 雖然沒有返回值,但沒有被宣告為void,實際上建構函式不允許宣告型別的。例子 stock stock const char co,int n,doublem 當建立物件初始化賦值有兩種方式 1.stock food stock adsfdsa 1,5.0 ...
C 之建構函式與析構函式
c 中重要的是類的構造,對乙個事物抽象,得到其本質的東西 所謂本質,放之四海而皆準 類也無非對一些資料與函式的封裝。對於類中的建構函式 析構函式有其固有的特點。故總結如下 建構函式和析構函式是在類體中說明的兩種特殊的成員函式。建構函式是在建立物件時,使用給定的值來將物件初始化。析構函式的功能正好相反...