關於「不能例項化抽象類「錯誤的解決辦法

2021-07-29 18:11:34 字數 1109 閱讀 3103

這篇文章講解乙個程式設計中遇到乙個錯誤,那就是提示」不能例項化抽象類的錯誤「,在輸出視窗有如下的錯誤提示資訊,如下圖:

根據具體情況不同,可能涉及到的類也可能不同,但是道理是一樣的,之所以出現這樣的錯誤呢,其實是因為,你繼承的類的抽象方法沒有在繼承類中進行重寫,比如在這裡,我從cview類繼承了乙個類ctrlee類,但是我沒有重寫ondraw函式,然後就進行了對ctrlee類的使用,如下:

那麼現在我將ondraw函式補上,並在原始檔中進行定義,在標頭檔案中,我去掉注釋,是ondraw生效,如下圖:

在原始檔中我進行定義,如下圖:

現在我再編譯,就可以了,並且正常執行,如下:

這裡只是為了說明這麼乙個道理,在實際的mfc變成過程中,我們使用mfc類嚮導新增的類的時候,會自動為我們新增基類的抽象函式(虛函式),並定義。只是有的時候我們手動修改**的時候,可能會遇到這樣的問題,比如,如下圖,通過使用類嚮導生成的類的標頭檔案中,是這樣的,如下圖:

我們可以看見有個部分叫重寫,就是用於重寫基類的虛函式,但是為什麼同樣是繼承與cview,這裡除了ondraw還有別的虛函式,剛才我們那個類中沒有重寫啊,其實因為這幾個虛函式在cview基類進行了定義。而ondraw是乙個純虛函式,只有宣告,沒有定義。

在重寫虛函式的時候,一定要記住,那就是函式的函式名以及引數,返回型別等要和被重寫的函式完全一致。否則就不能完成重寫任務,仍然會有上面的錯誤出現。

不能例項化抽象類的淺嚐

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

不能例項化抽象類的淺嚐

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

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

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