第七章類
阿新 • • 發佈:2018-03-04
using nbsp ide AI play opened pre bsp 方式
7.1定義抽象數據類型
Sales_data類
頭文件
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 class Sales_data 5 { 6 friend Sales_data add(const Sales_data &, const Sales_data &); 7 friend istream &read(istream &, Sales_data &); 8 friend ostream &print(ostream &, constView CodeSales_data &); 9 10 public: 11 Sales_data() = default; //構造函數 12 Sales_data(const string &s) :bookNo(s) {} 13 Sales_data(const string &s, unsigned n, double p) :bookNo(s), units_sold(n), revenue(p*n) {} 14 Sales_data(istream &); 15 16 17 string isbn() const{ return bookNo; } //相當於 string isbn () const { return this -> bookN0 } 18 Sales_data &combine(const Sales_data &); 19 20 private: 21 double avg_price() const; 22 string bookNo; //書ISBN編號 23 unsigned units_sold = 0; //書籍銷量 24 double revenue = 0.0; //書籍銷售收入 25 };26 27 Sales_data add(const Sales_data &lhs, const Sales_data &rhs) 28 { 29 Sales_data sum = lhs; 30 sum.combine(rhs); 31 return sum; 32 } 33 istream &read(istream &is, Sales_data &item) 34 { 35 double price = 0; 36 is >> item.bookNo >> item.units_sold >> price; 37 item.revenue = item.units_sold * price; 38 return is; 39 } 40 41 ostream &print(ostream &os, const Sales_data &item) 42 { 43 os << item.isbn() << " " << item.units_sold << " " 44 << item.revenue << " " << item.avg_price(); 45 return os; 46 } 47 48 Sales_data::Sales_data(istream &is) 49 { 50 read(is, *this); 51 } 52 Sales_data& Sales_data::combine(const Sales_data &rhs) 53 { 54 units_sold += rhs.units_sold; 55 revenue += rhs.revenue; 56 return *this; 57 } 58 59 double Sales_data::avg_price() const 60 { 61 if (units_sold) 62 return revenue / units_sold; 63 else 64 return 0; 65 }
源文件
1 #include<iostream> 2 #include"Sales_data.h" 3 4 using namespace std; 5 int main() 6 { 7 Sales_data total; 8 if (read(cin, total)) 9 { 10 Sales_data trans; 11 while (read(cin, trans)) 12 { 13 if (total.isbn() == trans.isbn()) 14 total.combine(trans); 15 else 16 { 17 print(cout, total) << endl; 18 total = trans; 19 } 20 } 21 print(cout, total) << endl; 22 } 23 else 24 { 25 cerr << "NO data?" << endl; 26 } 27 }View Code
構造函數:每個類都分別定義了它的對象被初始化方式,類通過一個或幾個特殊成員函數來控制其對象的初始化過程,這些函數叫做構造函數。【註意】1. 構造函數的名字和類相同 2.構造函數沒有返回類型。
7.2類的其他特性
第七章類