C++Primer 前面的书店程序

u013529401 2014-01-25 06:42:10
如何解决?
...全文
338 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sleeplacker 2014-01-25
  • 打赏
  • 举报
回复
我记得我是改过那个头文件的 我运行没问题,你看看是你哪里错了 Sales_item.h:
#ifndef SALESITEM_H  
#define SALESITEM_H  
#include <iostream>  
#include <string>  
   
   
class Sales_item  
{  
public:  
    Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}  
    Sales_item(std::istream &is){ is >> *this;}  
    friend std::istream& operator>>(std::istream &,Sales_item &);  
    friend std::ostream& operator<<(std::ostream &,const Sales_item &);  
public:  
    Sales_item & operator+=(const Sales_item&);  
public:  
    double avg_price() const;  
bool same_isbn(const Sales_item &rhs)const  
{  
    return isbn == rhs.isbn;  
}  
Sales_item():units_sold(0),revenue(0.0){}  
public:  
    std::string isbn;  
    unsigned units_sold;  
    double revenue;  
};  
   
using std::istream;  
using std::ostream;  
Sales_item operator+(const Sales_item &,const Sales_item &);  
inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)  
{  
    return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);  
}  
inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)  
{  
    return !(lhs == rhs);  
}  
   
inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)  
{  
    units_sold += rhs.units_sold;  
    revenue += rhs.revenue;  
    return *this;  
}  
inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)  
{  
    Sales_item ret(lhs);  
    ret += rhs;  
    return ret;  
}  
inline istream& operator>>(istream &in,Sales_item &s)  
{  
    double price;  
    in >> s.isbn >> s.units_sold >> price;  
    if(in)  
         s.revenue = s.units_sold * price;  
    else  
    s = Sales_item();  
    return in;  
}  
inline ostream& operator<<(ostream &out,const Sales_item &s)  
{  
    out << s.isbn << " " <<s.units_sold << " " << s.revenue << " " << s.avg_price();  
    return out;  
}  
inline double Sales_item::avg_price() const  
{  
    if(units_sold)  
        return revenue/units_sold;  
    else  
    return 0;  
}  
#endif  
bookstore.cpp:
#include <iostream>
#include "Sales_item.h"

int main()
{
	Sales_item total;	// variable to hold data for the next tansaction
	// read the first transaction and ensure that there are data to process
	if (std::cin >> total) {
		Sales_item trans;	// variable to hold the running sum
		// read and process the remaining transactions
		while (std::cin >> trans) {
			// if we're still processing 0the same book
			if (total.isbn == trans.isbn) {
				total += trans;	// update the running total
			}
			else {
				// print result for the previous book
				std::cout << total << std::endl;
				total = trans;	// total now refers to the next book
			}
		}
		std::cout << total << std::endl;	//print the last transaction
	} else {
		// no input!warn the user
		std::cerr << "No data?!" << std::endl;
		return -1;	//indicate failure
	}
	return 0;
}
arthurzhuyong 2014-01-25
  • 打赏
  • 举报
回复
std::string isbn; // operations on Sales_item objects std::string isbn() const { return bookNo; }
class Sales_item {
// these declarations are explained section 7.2.1, p. 270 
// and in chapter 14, pages 557, 558, 561
friend std::istream& operator>>(std::istream&, Sales_item&);
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
friend bool operator<(const Sales_item&, const Sales_item&);
friend bool 
operator==(const Sales_item&, const Sales_item&);
public:
    // constructors are explained in section 7.1.4, pages 262 - 265
    // default constructor needed to initialize members of built-in type
    Sales_item() = default;
    Sales_item(const std::string &book): bookNo(book) { }
    Sales_item(std::istream &is) { is >> *this; }
public:
    // operations on Sales_item objects
    // member binary operator: left-hand operand bound to implicit this pointer
    Sales_item& operator+=(const Sales_item&);
    
    // operations on Sales_item objects
    std::string isbn() const { return bookNo; }
    double avg_price() const;
// private members as before
private:
    std::string bookNo;      // implicitly initialized to the empty string
    unsigned units_sold = 0; // explicitly initialized
    double revenue = 0.0;
};

// used in chapter 10
inline
bool compareIsbn(const Sales_item &lhs, const Sales_item &rhs) 
{ return lhs.isbn() == rhs.
u013529401 2014-01-25
  • 打赏
  • 举报
回复
引用 1 楼 arthurzhuyong 的回复:
有那个Sales_item.h ??
有的啊
u013529401 2014-01-25
  • 打赏
  • 举报
回复
引用 2 楼 dcxy0 的回复:
网上找的.放在同一个文件夹.

#ifndef SALESITEM_H
#define SALESITEM_H
#include <iostream>
#include <string>


class Sales_item
{
public:
 Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
 Sales_item(std::istream &is){ is >> *this;}
 friend std::istream& operator>>(std::istream &,Sales_item &);
 friend std::ostream& operator<<(std::ostream &,const Sales_item &);
public:
 Sales_item & operator+=(const Sales_item&);
public:
 double avg_price() const;
 bool same_isbn(const Sales_item &rhs)const
 {
  return isbn == rhs.isbn;
 }
 Sales_item():units_sold(0),revenue(0.0){}
public:
 std::string isbn;
 unsigned units_sold;
 double revenue;
};

using std::istream;
using std::ostream;
Sales_item operator+(const Sales_item &,const Sales_item &);
inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)
{
 return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
}
inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)
{
 return !(lhs == rhs);
}

inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)
{
 units_sold += rhs.units_sold;
 revenue += rhs.revenue;
 return *this;
}
inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)
{
 Sales_item ret(lhs);
 ret += rhs;
 return ret;
}
inline istream& operator>>(istream &in,Sales_item &s)
{
 double price;
 in >> s.isbn >> s.units_sold >> price;
 if(in)
  s.revenue = s.units_sold * price;
 else
  s = Sales_item();
 return in;
}
inline ostream& operator<<(ostream &out,const Sales_item &s)
{
 out << s.isbn << "\t" <<s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
 return out;
}
inline double Sales_item::avg_price() const
{
 if(units_sold)
  return revenue/units_sold;
 else
  return 0;
}
#endif

这个我有的,应该不是这个问题
JPF1024 2014-01-25
  • 打赏
  • 举报
回复
网上找的.放在同一个文件夹.

#ifndef SALESITEM_H
#define SALESITEM_H
#include <iostream>
#include <string>


class Sales_item
{
public:
 Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
 Sales_item(std::istream &is){ is >> *this;}
 friend std::istream& operator>>(std::istream &,Sales_item &);
 friend std::ostream& operator<<(std::ostream &,const Sales_item &);
public:
 Sales_item & operator+=(const Sales_item&);
public:
 double avg_price() const;
 bool same_isbn(const Sales_item &rhs)const
 {
  return isbn == rhs.isbn;
 }
 Sales_item():units_sold(0),revenue(0.0){}
public:
 std::string isbn;
 unsigned units_sold;
 double revenue;
};

using std::istream;
using std::ostream;
Sales_item operator+(const Sales_item &,const Sales_item &);
inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)
{
 return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
}
inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)
{
 return !(lhs == rhs);
}

inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)
{
 units_sold += rhs.units_sold;
 revenue += rhs.revenue;
 return *this;
}
inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)
{
 Sales_item ret(lhs);
 ret += rhs;
 return ret;
}
inline istream& operator>>(istream &in,Sales_item &s)
{
 double price;
 in >> s.isbn >> s.units_sold >> price;
 if(in)
  s.revenue = s.units_sold * price;
 else
  s = Sales_item();
 return in;
}
inline ostream& operator<<(ostream &out,const Sales_item &s)
{
 out << s.isbn << "\t" <<s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
 return out;
}
inline double Sales_item::avg_price() const
{
 if(units_sold)
  return revenue/units_sold;
 else
  return 0;
}
#endif

arthurzhuyong 2014-01-25
  • 打赏
  • 举报
回复
有那个Sales_item.h ??

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧