练习7.41
1 #include <iostream> 2 #include <string> 3 #include "factmain.h" 4 using namespace std; 5 6 struct Sales_data { 7 friend ostream &print(ostream &os, const Sales_data &item); 8 friend istream &read(istream &is, Sales_data &item); 9 private: 10 string bookNo; 11 unsigned units_sold; 12 double price; 13 double revenue; 14 double avg_price() const; 15 public: 16 Sales_data(const string &s, const unsigned &u, const double &p) : bookNo(s), units_sold(u), price(p) { cout << "one" << endl; } 17 Sales_data() : Sales_data("12345", 3, 12) { cout << "使用的是委托构造函数构造默认构造函数" << endl; } 18 Sales_data(string s) : Sales_data(s, 2, 4) { cout << "仅仅输入一个字符串" << endl; } 19 //Sales_data(const string &s, const unsigned &u) : bookNo(s), units_sold(u) {} 20 Sales_data(istream &is) : Sales_data() { read(is, *this); cout << "最后一种" << endl; } 21 string isbn() const { return bookNo; } 22 unsigned &rUnit() { return units_sold; } 23 double &rPrice() { return price; } 24 double &rRevenue() { return revenue; } 25 Sales_data &combine(const Sales_data&); 26 27 }; 28 29 Sales_data add(const Sales_data &lhs, const Sales_data &rhs); 30 ostream &print(ostream &os, const Sales_data &item); 31 istream &read(istream &is, Sales_data &item); 32 33 34 int main() //main函数的部分需要改变 35 { 36 Sales_data s1; 37 Sales_data s2("123", 2, 3); 38 Sales_data s3("12"); 39 Sales_data s4(cin); 40 /*Sales_data test1("hello",56); 41 print(cout, test1); 42 Sales_data item1(cin); 43 Sales_data item2; 44 double totalRevenue = 0; 45 double totalSold = 0; 46 int counter = 1; 47 if ((item1.isbn()).empty()) 48 { 49 item1.rRevenue() = item1.rPrice() * item1.rUnit(); 50 while (read(cin,item2)) { 51 item2.rRevenue() = item2.rPrice() * item2.rUnit(); 52 if (item1.isbn() == item2.isbn()) { 53 item1.combine(item2); 54 ++counter; 55 } 56 else { 57 print(cout, item1) << endl; 58 item1.isbn() = item2.isbn(); 59 item1.rUnit() = item2.rUnit(); 60 item1.rRevenue() = item2.rRevenue(); 61 counter = 1; 62 } 63 } 64 print(cout, item2) << endl; 65 }*/ 66 system("pause"); 67 return 0; 68 } 69 70 Sales_data add(const Sales_data & lhs, const Sales_data & rhs) //非成员函数add 71 { 72 Sales_data sum = lhs; 73 sum.combine(rhs); 74 return sum; 75 // TODO: 在此处插入 return 语句 76 } 77 78 istream & read(istream & is, Sales_data & item) 79 { 80 is >> item.bookNo >> item.units_sold >> item.price; 81 item.revenue = item.units_sold * item.price; 82 return is; 83 // TODO: 在此处插入 return 语句 84 } 85 86 ostream & print(ostream & os, const Sales_data & item) 87 { 88 os << item.bookNo << " " << item.units_sold << " " << item.price << " " << item.revenue; 89 return os; 90 // TODO: 在此处插入 return 语句 91 } 92 93 Sales_data & Sales_data::combine(const Sales_data &rhs) 94 { 95 units_sold += rhs.units_sold; 96 revenue += rhs.revenue; 97 return *this; 98 } 99 100 inline double Sales_data::avg_price() const 101 { 102 return units_sold ? revenue/units_sold : 0; 103 }
练习7.42
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class Date { 6 public: 7 Date(unsigned y, unsigned m, unsigned d, const string &s) : years(y), mon(m), days(d), weather(s) {}; 8 Date() : Date(2000, 1, 1, "good") {} 9 Date(string &s) : Date(1999, 9, 9, s) {} 10 11 private: 12 unsigned years; 13 unsigned mon; 14 unsigned days; 15 string weather; 16 };