Exercice_7.31-练习创建类的成员函数

这里我要创造一个Sales_item类,用来保存销售记录,要求有以下几个字段:

1.isbn 商品的ISBN号

2.units_sold 销量

3.revenue 总价

接下来我们需要以下几个函数:

1.avg_price() 计算单价

2.same_isbn() 用来判断两个商品是否有相同的isbn

3.input() 输入销售信息

4.output() 打印销售信息

确定了这些以后,我们这样来组织类的代码文件:

1.将对类的声明放在头文件 Sales_item.h中

2.将对类成员函数的定义放在源文件 Sales_item.cpp中

3.将主函数放在 main.cpp中

我们先来看一下代码,稍后来解释:

Sales_item.h


//自定义类Sales_item类的头文件
#ifndef SALES_ITEM_H_INCLUDED
#define SALES_ITEM_H_INCLUDED
#include <iostream>
#include <string>   //头文件中同样需要引入STL以及声明命名空间
using namespace std;

//定义一个Sales_item类
class Sales_item{
public:
    //定义操作
    double avg_price() const;   //const代表不能修改调用该函数的对象
    bool same_isbn(const Sales_item &rhs) const
    {
        return isbn == rhs.isbn;
    }

    istream& input(istream& in);
    ostream&  output(ostream& out) const;
    //构造函数
    Sales_item(): units_sold(0), revenue(0.0) {};

    //私有成员
private:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};
#endif // SALES_ITEM_H_INCLUDED
解释一下,成员函数末尾加const表示常量成员函数,即 不能通过该函数改变调用该函数的对象。&代表引用,返回对象的地址。构造函数:与{}之间的部分成为 函数的初始化列表。

然后是Sales_item.cpp

#include <Sales_item.h>

using namespace std;

//在类外定义成员函数
double Sales_item::avg_price() const
{
    if (units_sold)
        return revenue/units_sold;
    else
        return 0;
}

//输入一组交易
istream& Sales_item::input (istream& in)
{
    double price;
    in >> isbn >> units_sold >> price;
    if (in)
        revenue = units_sold * price;
    else
    {
        units_sold = 0;
        revenue = 0;
    }
    return in;

}
	

//输出一组交易
ostream& Sales_item::output(ostream& out) const
{
    out << isbn << '\t' << units_sold << '\t' << revenue << '\t' << avg_price();
    return out;
}
    这里的in可以是cin标准输入流,也可以是其他istream类型的输入流,这里的input()函数提示用户输入商品号,单价,和数量,而算出总价。

最后是main.cpp


#include <iostream>
#include <string>
#include <Sales_item.h>
using namespace std;

int main()
{
    Sales_item item;
    //读入并输出一组交易
    cout << "Enter some transactions(Ctrl+z to end):" << endl;
    while (item.input(cin))
    {
        cout << "The transaction is : " << endl;
        item.output(cout);
        cout << endl;
    }
    return 0;
}





posted @ 2014-05-07 20:15  庄浩  阅读(147)  评论(0编辑  收藏  举报