本文學習自 狄泰軟體學院 唐佐林老師的 資料結構課程
問題:我們建立資料結構為啥要建立乙個頂層父類呢?意義和價值是什麼?
建立可復用的資料結構庫注意:
當代軟體架構實踐中的經驗
new操作如果失敗會發生什麼?
new成功的時候 各個編譯器之間沒有什麼差異,但是new失敗的情況,編譯器之間就會產生不同的結果,比如早期的c++編譯器在new失敗的時候會返回乙個空指標,但是很多現c++編譯器在new失敗的時候會丟擲乙個標準庫裡面的異常,這就給我們建立乙個可復用的**庫帶來了一定的困難。因為如果說new失敗了,我們這個庫裡面的**如何處理才能相容絕大多數編譯器。
頂層父類介面定義
class object
;
實驗1
object.h
#ifndef object_h
#define object_h
//放入我們自己的命名空間中
namespace dtlib;
}#endif
object.cpp
#include "object.h"
#inlcude //malloc
#include //log
using namespace std;
namespace dtlib
;class child : public test
;int main()
執行結果:
object::operator new: 12
object::operator new: 16
obj1 = 0x5719c8
obj2 = 0x5719c0
object::operator delete: 0x5719c8
object::operator delete: 0x5719c0
說明:列印 「object::operator new」" 說明沒有呼叫系統的new,而是呼叫了頂層父類的new,
列印 「object::operator new: 12」 說明 test物件需要12個位元組 12 = i(4)+j(4)+p(4:隱藏著的指向虛函式表的指標)
列印 「object::operator new: 16」 說明 child物件需要16個位元組 16 = i(4)+j(4)+k(4)+p(4:隱藏著的指向虛函式表的指標)
列印 「object::operator delete:」 說明刪除時使用的不是系統delete 而是呼叫了頂層父類的delete
C 資料結構第12課 頂層父類的建立
小結 注 如果析構函式被定義為純虛函式,那麼必須提供純虛析構函式的定義 object 純虛析構函式的定義 這個定義是必需的,因為虛析構函式工作的方式是 最底層的派生類的析構函式最先被呼叫,然後各個基類的析構函式被呼叫。這就是說,即使是抽象類,編譯器也要產生對 object的呼叫,所以要保證為它提供函...
12 頂層父類的建立
目錄 頂層父類的介面定義 程式設計實驗 頂層父類的建立 小結 當代軟體結構實踐中的經驗 不幸的事實 new操作如果失敗會發生什麼?建立jqlib object類的意義 object obj1 new test size 12 8 虛函式指標 12 object obj2 new child size...
資料結構(七)之陣列類的建立
1.1 完成 array 類的具體實現 1.1.2 需求分析 1.1.3 array 設計要點 1.1.4 array 類的宣告 template typename t class array public object 1.2 完成 staticarray 類的具體實現 1.2.1 statica...