这里我要创造一个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;
}