每日 C 基類構造呼叫純虛函式的乙個問題

2021-10-12 01:45:44 字數 687 閱讀 4617

我們來看下面的一段**

class

base

virtual

~base()

virtual

void

test()

=0;void

does()

};class

derived

:public base ;~

derived()

;void

test

() override

};

我們看到 base 中的構造函式呼叫類的 does(),而 does() 中呼叫了 test()。在編譯過程中並沒有發生任何錯誤,但是當你去執行時,就會發現

pure virtual method called

terminate called without an active exception

這類**問題其實並不常見,但如果遇到,可以從這個方面入手。

如果析構在純虛函式呼叫之前,也會發生類似問題

std::unique_ptr b = make_unique()

;b->

~base()

;b->

test()

;

祝愉快!

虛基類 虛函式和純虛基類

首先看乙個例子 class base class child1 public base class child2 public base void main else p print 函式呼叫的時候,檢視虛表,根據p的位址首先從虛表裡面查詢要呼叫的函式 這裡呼叫child2的print 函式 ret...

C 虛基類 虛函式與純虛函式

虛基類 在說明其作用前先看一段 classa class b publica classc publica classd public b publicc void main 從 中可以看出類b c都繼承了類a的ivalue成員,因此類b c都有乙個成員變數ivalue 而類d又繼承了b c,這樣類...

C 虛基類建構函式

c 虛基類建構函式 下面文章詳細介紹c 虛基,所謂c 虛基類 是由最派生類的建構函式通過呼叫虛基類的建構函式進行初始化的,但前提是要深入理解到底什麼是c 虛基類,及他是怎麼執行的。前面講過,為了初始化基類的子物件,派生類的建構函式要呼叫基類的建構函式。對於虛基類來講,由於派生類的物件中只有乙個虛基類...