1. 程式人生 > 其它 >2021.17.18牛客

2021.17.18牛客

過載overload和重寫override(雖然這個很熟悉但是整一下)

過載,就是同名函式,不同引數實現的不同函式,和返回值無關

重寫,就是子類繼承父類的virtual修飾的函式,重新實現函式

都實現多型性

被final修飾的類就不能被繼承,所以被final修飾的函式不能被重寫override

靜態聯編和動態聯編

如果是直接使用物件名字呼叫的虛擬函式,就知道是哪個類呼叫的虛擬函式,所以是靜態聯編,如果是指標呼叫的話,不知道具體是哪個類,就叫動態聯編。

虛擬函式表

在32系統中,在物件聲明瞭虛擬函式的會比該類沒有宣告虛擬函式多出4個位元組,他的派生類也會多出4個位元組,就是儲存虛擬函式表的指標

呼叫的時候通過虛擬函式表查詢,呼叫虛擬函式。

友元函式、建構函式、行內函數、靜態函式不能宣告成虛擬函式

有些編輯器中自動就給虛擬函式加了virtual,為什麼虛擬函式要被定義為虛擬函式

不是不定義虛擬函式也會呼叫基類的解構函式嗎?

這只是靜態聯編,靜態編譯上面講了,是具體物件呼叫,如果是動態聯編,指標的析構時候只會呼叫基類的析構,不會呼叫子類的

ClxBase *p =  new ClxDerived;
p->DoSomething();
delete p;

如果設定析構是虛擬函式的情況就會都呼叫。