#include <string>
#include <iostream>
#include <ostream>
// 定義銷售商品類
// 1. 類體可以為空,類體定義組成該類型的資料和操作
// 2. 資料稱為資料成員
// 3. 類可以包含0個 到 多個private 或 public通路标号
// 4. 通路标号控制類成員在類外部是否可通路。
// 5. 使用該類的代碼可能隻能通路public 成員
// 6. 定義了類,也就是定義了一種新的類型
// 7. 類名就是該類型的名字
// 8. 類不是在類定義裡定義資料成員時初始化資料成員
// 9. 通過稱為構造函數的特殊成員函數控制初始化
// 10. 類的頭檔案,名字在使用前必須先聲明或定義
// 11. 由多個檔案組成的程式需要一種方法連接配接名字的使用和聲明,c++通過頭檔案實作
// 12. 頭檔案一般包含類的定義,extern變量的聲明和函數聲明。
// 13. 使用或定義這些實體的檔案要包含适當的頭檔案。
// 14. 設計頭檔案,記住定義和聲明的差別很重要,定義隻能出現一次,而聲明可以出現多次
// 15. extern int ival = 10 ; 初始化了,是以是定義
// 16. double rate; 沒有extern,是以是定義
// 17. 構造函數是特殊的成員函數,與類同名,沒有傳回類型,構造函數也有形參(可能為空)和函數體
// 18. 一個類可以有多個構造函數
class Sales_item
{
// 1. 操作符重載和友元關系
// 2. 操作符定義為非成員函數時,通常必須将他們設定為鎖操作類的友元
// 3. 在某些情況下,允許特定的非成員函數通路一個類的私有成員,同時仍然阻止一般的通路。
// 4. 友元(friend)機制允許一個類将對齊非公有成員的通路授予指定的函數或類。
// 5. 友元聲明以關鍵字friend開始,隻能出現在類定義的内部
// 6. 友元聲明可以出現在類中任何地方
// 7. 通常将 友元聲明成組地放在類定義的開始或者結尾
friend std::ostream&
operator>>(std::istream&, Sales_item&);
friend std::ostream&
operator<<(std::ostream&,const Sales_item&);
private:
/* data */
std::string isbn; // 圖書編号
unsigned units_sold;// 銷售機關
double revenue; //收入
public:
// 1. 定義Sales_item的構造函數,這個函數的形參表和函數體為空
// 2. 冒号和花括号之間的代碼稱為構造函數初始化清單
// 3. 構造函數初始化清單為類的一個或多個資料成員指定初值
// 4. 初始化清單,跟在構造函數形參表之後,以冒号開頭
// 5. 構造函數初始化是一系列成員名,每個成員後面是括在圓括号中的初始值
// 6. 多個成員的初始化用逗号分隔
// 7. 如果沒有為一個類顯試定義任何構造函數,編譯器将自動為這個類生成預設構造函數
// 8. 由編譯器建立的預設構造函數通常稱為合成的預設構造函數
// 9. 有類類型的成員,則會調用該成員所屬類自身的預設構造函數實作初始化
// 10. 内置類型成員的初始值依賴于對象如何定義,如果對象在全局作用域中定義(即不在任何函數中),或定義為靜态局部對象,這些成員将被初始化為0
// 11. 如果對象在局部作用域中定義,則這些成員沒有初始化
Sales_item(/* args */): units_sold(0),revenue(0.0){};
~Sales_item();
};
Sales_item::Sales_item(/* args */)
{
}
Sales_item::~Sales_item()
{
}