虛函式主要用於c++中的多型特性,對於類的繼承而言,如果用父類的指標指向子類的的物件,當用該指標操作子類物件時,該指標只能操作父類中的函式,而對於子類中特有的和過載的方法,用該指標將無法使用。案例:
class base };
class derive :public base
void
show()
//派生類獨有的方法
}int
main()
虛函式可以解決用父類的指標訪問子類中過載父類的函式上面案例的做出如下修改:
class base };
class derive :public base
void
show()
//派生類獨有的方法
}int
main()
在需要過載的方法前面加上virtual關鍵字,就可以用父類的指標呼叫子類的過載方法。當基類中用虛函式時,其派生類在過載該虛函式時也是用虛函式的方式進行過載,過載虛函式時其關鍵字virtual可以省略,但是為了更直觀不建議省略。 進行虛函式過載時函式的引數和返回型別必須和原來父類的函式一樣。上述規則在有種情況下是不成立的,當函式返回的是類本身的指標或者引用。例子如下:
class base
virtual void
show()
};class derive :public base
void
show()
};intmain()
虛函式過載時,如果引數和基類的引數不同則編譯器將會認為該函式為派生類的獨有的函式,為了能夠知道派生類是否正確的覆蓋了虛函式,c++中引入了關鍵字override,用以檢查派生類是否正確的覆蓋了虛函式。
只有虛函式的覆蓋才能在函式的後面加上override(加到引數列表、const、&符的後面)
當某個虛函式後面被加上final關鍵字後,表示該函式將不能夠被覆蓋,如果覆蓋這樣的虛函式則編譯器將會報錯。
虛函式中同樣可以定義預設引數,但是對於派生類而言,如果派生類的物件掉用虛函式時使用到了預設引數,那麼該預設引數將會是基類的預設引數。
class base };
class derive :public base};
base a;
derive d;
a.show()
;//列印結果為0
b.show()
;//列印結果為0,派生類的預設值為基類的值。
C 學習筆記之虛函式
虛函式即在父類中成員函式錢加上virtual關鍵字,使得該成員函式具有動態鏈結屬性 因此函式具有了多型性 那麼什麼是動態鏈結呢?即程式在編譯階段不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,要確切的知道呼叫的函式,要求聯編工作要在程式執行時進行,這種程式執行時進行的聯編稱之為動...
C 學習筆記之虛函式
1.聯編是電腦程式彼此關聯的過程,這個過程需要確定函式呼叫和執行函式呼叫的 之間的對映關係,按照聯編的不同階段,可以分為靜態聯編和動態聯編 2.靜態聯編 就是在程式執行之間執行的早期聯編,那麼在程式執行時就會按照靜態聯編的結果進行執行,這也就是為什麼一直執行的時父類的func,也就是說如果父類和子類...
C 學習筆記 虛析構函式
我們直接上案例 虛析構函式.cpp 定義控制台應用程式的入口點。include stdafx.h includeusing namespace std pragma warning disable 4996 class a a private char p class b public a b pr...