首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Primer 書店程式:Sales_data 類完整實作詳解

     編輯:關於C++

《C++ Primer》經典書店程式範例,展示 Sales_data 類的完整設計,涵蓋建構函數、運算子多載、友元函數、IO 操作等核心 C++ 特性。

類別設計重點

  • 資料成員:ISBN (bookNo)、銷售量 (units_sold)、總營收 (revenue)
  • 建構函數:預設、ISBN 初始化、完整參數、輸入流建構
  • 運算子多載:+=、+、==、!=、= (字串賦值)、流輸入輸出 >>/<<
  • 封裝性:私有成員配合友元函數實作對稱運算

關鍵實作細節

// 複合賦值運算子(成員函數)
Sales_data& operator+=(const Sales_data& rhs) {
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}

// 非成員加法運算子(對稱性)
Sales_data operator+(const Sales_data& lhs, const Sales_data& rhs) {
    Sales_data sum = lhs;
    sum += rhs;
    return sum;
}

// 輸入運算子:讀取 ISBN、數量、單價 → 計算營收
std::istream& operator>>(std::istream& is, Sales_data& item) {
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    if (is) item.revenue = item.units_sold * price;
    else item = Sales_data();  // 輸入失敗重置
    return is;
}

設計模式亮點

  1. 友元函數:授權非成員函數存取私有成員,實現 operator+ 等對稱運算
  2. 內聯函數:avg_price() 定義為 inline 提升效能
  3. 流狀態檢查:輸入運算子中驗證串流狀態,確保資料完整性
  4. 預設建構函數:初始化銷售量為 0、營收為 0.0

應用場景

此類別可作為交易記錄系統的核心資料結構,支援多筆交易合併、比較、輸出格式化等業務操作,是掌握 C++ 類別設計的優秀練習案例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved