My Code:
//Sales_item.h #include<iostream> #include<string> using namespace std; class Sales_item { public: Sales_item(); //构造函数 //或者 //Sales_item():units_sold("0-201-70535-x"), units_sold(0.0){}; ~Sales_item(); void cin(); //输入函数 void cout() const; //输出函数 Sales_item &sum(const Sales_item &item); //求和操作,定义为const值可以避免复制、改变原来的值 double avg_price(); //求平均 private: string isbn; //国际标准书号 unsigned units_sold; //销售的数量 double revenue; //收入 };
//Sales_item.cpp #include"Sales_item.h" #ifndef SALES_ITEM_H_H #define SALES_ITEM_H_H #include<iostream> #include<string> Sales_item::Sales_item() //构造函数 { isbn = "0-201-70353-x"; units_sold = 0; revenue = 0.0; } //或者 //Sales_item::Sales_item():units_sold("0-201-70535-x"), units_sold(0.0){}; Sales_item::~Sales_item() { } void Sales_item::cin() { std::cin >> isbn; std::cin >> units_sold; std::cin >> revenue; } void Sales_item::cout () const { std::cout << isbn << "\t"; std::cout << units_sold << "\t"; std::cout << revenue << endl; } Sales_item temporary; Sales_item &Sales_item::sum(const Sales_item &item) //定义为const型引用可以避免复制。改变原来的值 { if(isbn == item.isbn) { temporary.isbn = isbn; temporary.units_sold = units_sold + item.units_sold; temporary.revenue = revenue + item.revenue; return temporary; } std::cout << "Wrong ISBN ???" << endl; return temporary; } double Sales_item::avg_price() { if(units_sold) return revenue/units_sold; else return 0; } #endif
//main.cpp #include<iostream> #include"Sales_item.h" using namespace std; void main() { Sales_item book; cout << "Enter a Sales_item:" << endl; book.cin(); book.cout(); Sales_item book2; cout << "Enter another Sales_item:" << endl; book2.cin(); cout << "The sum of the same book is:\t"; book.sum(book2).cout(); cout << "The average price of the same book is:\t"; cout << book.sum(book2).avg_price(); cout << endl; }
//Sales_item.h #ifndef SALESITEM_H #define SALESITEM_H #include<iostream> #include<string> class Sales_item { public: //Sales_item对象的操作 std::istream& input(std::istream& in); std::ostream& output(std::ostream& out) const; double avg_price() const; bool same_isbn(const Sales_item &rhs) const { return isbn == rhs.isbn; } //默认构造函数徐璈初始化内置类型的数据成员 Sales_item::Sales_item(): units_sold(0), revenue(0.0) { }; private: std::string isbn; unsigned units_sold; double revenue; }; #endif
//Sales_item.cpp //自定义的Sales_item类的实现文件(源文件) #include "Sales_item.h" std::istream& Sales_item::input(std::istream& in) { double price; in >> isbn >> units_sold >> price; //检验是否读入成功 if(in) revenue = units_sold * price; else { //读入失败:将对象复位为默认状态 units_sold = 0; revenue = 0.0; } return in; } std::ostream& Sales_item::output(std::ostream& out) const { out << isbn << "\t" << units_sold << "\t" << revenue << "\t" << avg_price(); return out; } double Sales_item::avg_price() const { if(units_sold) return revenue/units_sold; else return 0; }
//main.cpp #include "Sales_item.h" #include <iostream> using namespace std; void main() { Sales_item item; //读入并输出一组交易 cout << "Enter some transactions(Ctr+Z to end):" << endl; while(item.input(cin)) { cout << "The transaction readed is:" << endl; item.output(cout); cout << endl; } }运行实例:
0-201-78345-x 3 20.00 0-201-78345-x 2 25.00