【數據結構實戰C++】13 類族結構改進

【數據結構實戰C++】13 類族結構改進

作者 CodeAllen ,轉載請註明出處


遵循經典設計準則
設計的KKlib中的所有類位於單一的繼承樹
在這裏插入圖片描述

如何通過編程改進
改進的關鍵點
-exception類繼承自object類

  • 堆空間中創建異常對象失敗的時候,返回NULL指針
    -新增InvalidOperationException異常類
  • 成員函數調用時,如果狀態不正確則拋出異常
    -SmartPointer類繼承自object類
  • 堆空間中創建智能指針對象失敗時,返回NULL指針

實驗1 類族結構的進化
將之前的SmartPointer.h改爲繼承自父類object

#include <iostream>
#include <Exception.h>
#include "Object.h"
#include "SmartPointer.h"
using namespace std;
using namespace KKLib;
int main()
{
    SmartPointer<int>* sp = new SmartPointer<int>(); //是一個模板,需要把指向的指針寫出來
    delete sp;
    return 0;
}
#include <iostream>
#include <Exception.h>
#include "Object.h"
#include "SmartPointer.h"
using namespace std;
using namespace KKLib;
int main()
{
    InvalidOperationException* e = new InvalidOperationException();
    delete e;
    return 0;
}

從結果看,所有類都繼承自父類 object

KKLib的開發方式和注意事項
-迭代開發

  • 每次開發完一個小目標,持續開發,最終打造可複用類庫
    -單一繼承樹
  • 所有類都繼承自object,規模堆對象創建時的行爲
    -只拋異常,不處理異常
  • 使用THROW_EXCEPTION拋出異常,提高可移植性
    -弱耦合性
  • 儘量不適用標準庫中的類和函數,提高可移植性

實驗 : 可移植性測試(很多公司要求不能使用異常處理機制,不能用try … catch …)
#define THROW_EXCEPTION(e, m) //(throw e(m, FILE, LINE))

int main()
{
    cout << "main begin" <<endl;
    THROW_EXCEPTION(InvalidOperationException, "test");
    cout << "main() end" << endl;
    return 0;
}

改動之後會順利執行,但是這行沒有意義

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章