Effective C++ -- 設計與聲明

來源:互聯網
上載者:User

標籤:介面   聲明   設計   

18.讓介面容易被正確使用問題:
  • 介面的參數
  • 介面依賴其他調用
class Date {public:    Date(int month,int day, int year;}

以上代碼問題:

  • 容易以錯誤的順序傳遞參數
  • 可能傳遞無效的月份或天數
    解決方案:
  • 通過匯入新類型獲得預防
struct Day {    explicit Day(int):val(d){}    int val;};class Date {public:    Data(const Month& m, const Day& d, const Year& y);};Date d(Month(3), Day(30), Year(1995));

以上代碼無法限制資料範圍
解決方案:

  • 利用enum表現月份
  • 預定義有效Month
 class Month { public:     static Month Jan() {return Month(1);}     static Month Feb() {return Month(2);} private:     explicit Month(int m); };Date d(Month::Feb(), Day(30), Year(1995)); 
介面設計原則
  • 介面不容易被誤用
    • 建立新類型
    • 限制類型上的操作
    • 消除客戶的資源管理責任
  • 介面一致性
    • stl容器都有一個size介面
    • 不要有的時length,有的是size
  • 任何介面如果要求客戶必須記得做某事,會有不正確使用傾向
// 會導致忘記刪除指標Investment* createInvestment();// 解決方案,儲存到智能指標// 客戶會忘記儲存的到智能指標// 解決方案:函數返回智能指標auto_ptr<Investment> createInvestment()
19.設計class猶如設計type需要考慮的問題:
  • 新type對象該如何建立和銷毀
    • 建構函式,解構函式
    • operator new,operator delete, operator new[] operator delete[]
  • 對象初始化和對象賦值有什麼區別
  • 新type的對象如果被pass by value,意味著什嗎?
    • copy建構函式如何?
  • 什麼時新type的合法值
  • 新type需要配合某個繼承圖系嗎
    • 如果繼承某個既有類,受到該類的影響,特別時virtual,non-virtual的影響
    • 如果容許其他類繼承,影響你所聲明的函數,尤其時解構函式是否為virtual
  • 你的type需要什麼樣的轉換
    • T1需要轉換為T2,T1內寫類型轉換函式operator T2,或著T2內寫non-explicit 建構函式
    • 轉換是否需要為explicit的函數
  • 什麼樣的操作符和函數是合理的
  • 該誰取用新的type的成員
    • public,protected,private,friend
  • 你的新type有多麼一般化
    • 是否需要為class template
20.寧以pass-by-reference-to-const替代pass-by-value使用pass-by-value問題
  • 傳遞的類對象執行copy建構函式,造成效能低下
  • 類對象內部的成員變數執行copy建構函式,造成效能低下
解決方案:
  • 傳遞常量引用
  • 傳遞引用可以避免切割發生(切割後virtual函數調用的是基類的virtual函數)
  • 對於內建對象,pass-by-value更高效
    • 編譯器會把內建對象放入緩衝器
  • 小型的類對象,pass-by-reference更高效
    • 編譯器可能不會對小型類對象最佳化
    • 類對象大小隨著需求增加可能會變化,會變為大的類對象

Effective C++ -- 設計與聲明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.