我們來看下面的一段**
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 虛基類,及他是怎麼執行的。前面講過,為了初始化基類的子物件,派生類的建構函式要呼叫基類的建構函式。對於虛基類來講,由於派生類的物件中只有乙個虛基類...