c++ primer 第五版的Sales_data类

来源:互联网 发布:xampp mac使用教程 编辑:程序博客网 时间:2024/06/05 07:36

这个书店程序在c++ primer第五版中可是贯穿了大概两百页(我才看到二百多页)啊,终于看完了。看着书上的代码,终于的写完了Sales_data类,毕竟初学,很多地方不熟悉,写的和书上有些差距,有些地方修改了,简化了一些。本来出错时还想参考一下Sales_item类,发现看不太懂啊。。。 等到水平高了,再写一次。

#include <iostream>#include <string>class Sales_data{    //声明友元函数    friend Sales_data add(const Sales_data&, const Sales_data&);    friend std::ostream &print(std::ostream&, const Sales_data&);    friend std::istream &read(std::istream&, Sales_data&);public:    //构造函数    Sales_data ()://书上有个Sales_data () = default;的语句,不知道为啥我放在这里编译时就报错,无奈,去掉了        bookNo(" "), units_sold(0), revenue(0) {}    Sales_data(std::istream &is)//按照书上,这个是用来练习在类外部定义构造函数,课时我出错了,就把他放到类里面了    {        read(is, *this);    }    std::string isbn() const {return bookNo;}//返回isbn    Sales_data& combine(const Sales_data&);//声明combine函数,函数功能是吧isbn相同的书的数据加到一块    double avg_price() const//求平均价格,书上232页定义在了类的外部,240页又定义在了类的内部。。。我是定义在了内部    {        return units_sold ? revenue/units_sold : 0;    }private:    std::string bookNo;//isbn    unsigned units_sold = 0;//卖出的书的册数    double revenue = 0.0;//总收益};Sales_data add(const Sales_data&, const Sales_data&);//接受两个Sales_data对象,返回一个新的Sales_data对象,表示前两个对象之和std::ostream &print(std::ostream&, const Sales_data&);//将数据读取到对象中std::istream &read(std::istream&, Sales_data&);//将对象的内容打印到给定的流中Sales_data& Sales_data::combine(const  Sales_data &rhs)//在类的外部定成员函数{    units_sold += rhs.units_sold;    revenue += rhs.revenue;    return *this;//返回一个this对象}std::istream &read(std::istream &is, Sales_data &item){    double price = 0;    is >> item.bookNo >> item.units_sold >> price;    item.revenue = price * item.units_sold;    return is;}std::ostream &print(std::ostream &os,const Sales_data &item){    os << item.isbn() << " " << item.units_sold        << " " << item.revenue << " " << item.avg_price();    return os;}Sales_data add(const Sales_data &lhs, const Sales_data &rhs){    Sales_data sum = lhs;    sum.combine(rhs);    return sum;}


1 0