您的位置:首页 > 编程语言 > C语言/C++

读完C++ Primer 第4版 第一章后 实现的Sale_item类

2015-08-18 23:06 615 查看
header file(Sale_item.h):

#ifndef SALES_ITEM_H

#define SALES_ITEM_H

#include<iostream>

class Sales_item

{

    public:

        Sales_item();

        virtual ~Sales_item();

        bool same_isbn(Sales_item& s);

    protected:

    private:

        std::string isbn;

        unsigned int units_sold;

        double revenue;

        double avg_price;

    friend std::istream& operator>>(std::istream& in, Sales_item& s);

    friend std::ostream& operator<<(std::ostream& out, Sales_item& s);

    friend Sales_item& operator+(Sales_item & s1, Sales_item& s2);

};

#endif // SALES_ITEM_H

实现(Sale_item.cpp):

#include "Sales_item.h"

Sales_item::Sales_item()

{

    //ctor

}

Sales_item::~Sales_item()

{

    //dtor

}

bool Sales_item::same_isbn(Sales_item& s)

{

    if (isbn == s.isbn)

     {

         return true;

     }

    else return false;

}

std::istream& operator>>(std::istream& in, Sales_item& s)

{

  in>>s.isbn>>s.units_sold>>s.avg_price;

  s.revenue = s.units_sold*s.avg_price;

  return in;

}

std::ostream& operator<<(std::ostream& out, Sales_item& s)

{

   out<<s.isbn<<" "<<s.units_sold<<" "<<s.revenue<<" "<<s.avg_price;

   return out;

}

Sales_item& operator+(Sales_item & s1, Sales_item& s2)

{

    if(s1.isbn != s2.isbn)

    {

        //do something

    }

    s1.units_sold = s1.units_sold + s2.units_sold;

    s1.revenue = s1.revenue + s2.revenue;

    s1.avg_price = s1.revenue/s1.units_sold;

    return s1;

}

====================================================

C++ 学习, 坚持,每天进步一点点!

以前只有C基础, 通过上面的类,会使用基本的操作符重载

注意点: 操作符重载, 即可以选择成员函数重载,也可非成员函数(一般是友元, 为了访问类的Private 成员); 当用成员函数重载时,参数比正常的要少一个,因为成员函数有一个隐含的this指针,指向该类的一个对象。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ C++ Primer