如图输入两笔交书的交易金额,求和与平均售价 主程序为 #include "Sales_item.h" #include <iostream> #include <string> #include <vector> #include <bitset> #include <cstring> //和C语言的string.h其实是一个版本 #include <stdexcept> //或用 #include <exception> 都行 using std::bitset; using std::vector; using std::cin; using std::endl; using std::cout; using std::string; using std::overflow_error; //#define NDEBUG //--------------------------------------------------------------------------- int main() { Sales_item book; Sales_item bookl,bookr; bookl.input (cin); bookr.input (cin); book.addSales_item (bookl,bookr); book.output(cout); cout<<endl; return 0; } Sales_item.h #include <stdexcept> #include <string> #include <iostream> #pragma once class Sales_item { public: Sales_item(void); ~Sales_item(void); std::istream& input(std::istream &in); std::ostream& output( std::ostream &out) const; void addSales_item(Sales_item& ls,Sales_item &rs); double avg_price() const; //const 跟在函数后,表明函数并不修改调用函数的对象的值 bool same_isbn(const Sales_item &rhs) const //类内定义的函数会隐式地作为内联函数处理,所以小函数可以在类内定义 { return isbn==rhs.isbn ; //这里的==应该是比较两个string的值是否一样,但编绎报错,为什么呢?因为要加入#include<string>才可以使用string类 } private: std::string isbn; unsigned units_sold; double revenue; }; Sales_item.cpp #include "Sales_item.h" Sales_item::Sales_item(void):units_sold(0),revenue(0.0) { } Sales_item::~Sales_item(void) { } double Sales_item::avg_price() const { if(units_sold) return revenue/units_sold; else return 0; } 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; } void Sales_item::addSales_item(Sales_item& ls,Sales_item &rs) { if(ls.isbn !=rs.isbn ) std::cout<<"请输入相同的书的销售记录"<<std::endl; else { isbn =ls.isbn ; units_sold=ls.units_sold +rs.units_sold ; revenue =ls.revenue +rs.revenue ; } return ; }