不能例項化抽象類的淺嚐

2021-08-26 06:10:20 字數 750 閱讀 7003

今天寫**,想實現個功能,寫成乙個介面類,做成了cview的子類,編譯無法通過,說是不能例項化抽象類,由於cview::ondraw是抽象的。這個問題我是第一次遇到,於是網上搜了一下都不能得到滿意的答案。找出c++方面的書認真分析了一下,又收穫不少。

首先對於虛函式存在的意義有了新的認識。

如果沒有虛函式,對於「基類的指標」指向「派生類的物件」,只能由該指標呼叫基類所定義的函式。例如:

class ca class ca:public ca ca* pa; ca a1; ca a1; pa = &a1; pa->b(); // 其實這句呼叫的是ca::b();

有了虛函式後,將上述兩個b函式都宣告成virtual函式,則有

pa = &a1; pa->b(); // 其實這句呼叫的是ca::b(); pa = &a1; pa->b(); // 其實這句呼叫的是ca::b();

這就是我總結的虛函式的妙用,但應該理解還不是很深刻,歡迎高手拍磚。

回到我之前的問題,mfc中有兩個十分重要的虛函式,document中的sirialize函式和view中的ondraw函式。而這兩個函式又是純虛函式,需要使用者在自己的cmydoc和cmyview中改寫,而我的類繼承了cview,卻沒有改寫ondraw函式,就變成了抽象類,不能對其實例,於是就有了報錯「不能例項化抽象類」。bingo!

但是我還沒太想好好的解決辦法,如果把我做的類繼承改為cwnd,我類裡的部分函式就無法使用,如getdc()。本身又不想把ondraw函式複寫,所以還請高手給我一種大家通用的方法。

不能例項化抽象類的淺嚐

今天寫 想實現個功能,寫成乙個介面類,做成了cview的子類,編譯無法通過,說是不能例項化抽象類,由於cview ondraw是抽象的。這個問題我是第一次遇到,於是網上搜了一下都不能得到滿意的答案。找出c 方面的書認真分析了一下,又收穫不少。首先對於虛函式存在的意義有了新的認識。如果沒有虛函式,對於...

抽象類為什麼不能例項化(new)

抽象類為什麼不能例項化 new 答案是 規定。第一點 回歸問題最初,我們為什麼要例項化?我們先逆向思維來考慮,從物件導向的思想來看 我們需要完成實現乙個功能,而功能中的方法,是由物件來呼叫的,因此我們需要物件,因此我們需要例項化。那麼回歸本問題,什麼是抽象類?抽象 就是不具體的意思。類是對物件的具體...

PHP抽象類 無法例項化

類前加 abstract,此類就成為抽象類,無法例項化.舉例 春秋戰國時期,燕零七 飛行器專家,能工巧匠.他寫了乙份圖紙 飛行器製造術 飛行器秘製圖譜 他的孫子問 發動機怎麼造呢?燕零七眼望夕陽 我是造不出來,但我相信後代有人造出來 燕零七的構想,當時的科技造不出來,即這個類只能在圖紙化,無法例項化...