2.5 自定義資料結構
練習39:編譯下面的程式觀察其執行結果,注意,如果忘記寫類定義體後面的分號會發生什麼情況?記錄下相關資訊,以後可能會有用。
struct foo //注意:沒有分號
int main()
【解答】
該程式無法編譯通過,原因是缺少乙個分號。因為類體後面可以緊跟變數名以示對該型別物件的定義,所以在類體右側表示結束
的花括號後必須寫乙個分號。稍作修改,該程式就可以編譯通過 了。
struct foo ;
int main()
練習40:根據自已的理解寫出sales_data類,最好與書中的例子有所區別。
【解答】
原書中的程式包含3個資料成員,分別是bookno(書籍編號)、units_sold(銷售量)、revenue(銷售收入),新設計的
sales_data類細化了銷售收入的計算方式,在保留bookno和units_sold的基礎上,新增了sellingprice(零售價、原價)、
saleprice(實售價、折扣價)、discount(折扣),其中discount=saleprice/sellingprice。
struct sales_data;
練習41:使用你自己的sales_data類重寫1.5.1節(第20頁)、1.5.2節(第21頁)和1.6節(第22頁)的練習。眼下先把sales_data類的定義和main函式放在同乙個檔案裡。
#include #include using namespace std;
class sales_data
sales_data(std::istream &is)
public:
sales_data& operator += (const sales_data&);
std::string isbn() const
private:
std::string bookno; //書籍編號,隱式初始化為空串
unsigned units_sold = 0; //銷售量,顯示初始化為0
double sellingprice = 0.0; //原始**,顯示初始化為0.0
double saleprice = 0.0; //實售**,顯示初始化為0.0
double discount = 0.0; //折扣,顯示初始化為0.0
};inline bool compareisbn(const sales_data &lhs, const sales_data &rhs)
sales_data operator + (const sales_data&, const sales_data&);
inline bool operator == (const sales_data &lhs, const sales_data &rhs)
inline bool operator != (const sales_data &lhs, const sales_data &rhs)
sales_data& sales_data::operator += (const sales_data& rhs)
sales_data operator + (const sales_data& lhs, const sales_data& rhs)
std::istream& operator >> (std::istream& in, sales_data& s)
std::ostream& operator << (std::ostream& out, const sales_data& s)
int main()
sales_data trans1, trans2;
std::cout << "請輸入兩條isbn相同的銷售記錄:" << std::endl;
std::cin >> trans1 >> trans2;
if(compareisbn(trans1, trans2))
std::cout << "彙總資訊:isbn,售出本數,原始**,實售**,折扣為" << trans1 + trans2 << std::endl;
else
std::cout << "兩條銷售記錄的isbn不同" << std::endl;
sales_data total, trans;
std::cout << "請輸入幾條isbn相同的銷售記錄:" << std::endl;
if(std::cin >> trans)
else //isbn不同
}else
int num = 1; //記錄當前書籍的銷售記錄總數
std::cout << "請輸入若干銷售記錄:" << std::endl;
if(std::cin >> trans1)
else //isbn不同
std::cout << trans1.isbn() << "共有" << num << "條銷售記錄" << std::endl;
}else
return 0;
}
《C Primer》第2章 2 4節習題答案
2.4 const限定符 練習26 下面的哪些句子是合法的?如果有不合法的句子,請說明為什麼?a const int buf b int cnt 0 c const int sz cnt d cnt sz 解答 本題的所有語句應該看作是順序執行的,即形如 const int buf int cnt ...
C primer習題 第3章
習題 2.11 編寫程式,要求使用者輸入兩個數 底數 base 和指數 exponent 輸出底數的指數次方的結果。include include include using namespace std intmain for int i 1 i exp i result base cout 的 次...
C primer習題 第4章
習題 4.7 編寫必要的 將乙個陣列賦給另乙個陣列,然後把這段 改用 vector 實現。考慮如何將乙個 vector 賦給另乙個 vector。用陣列實現 include using namespace std intmain inta2 size for size t i 0 ii a2 i a...