C++Primer 习题7.学前瞎写
Sales_data.h
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include<iostream>
#include<string>
#include<stdexcept>
using namespace std;
class Sales_data
{
public:
using bname = std::string;
using bnum = std::string::size_type;
using bprice = double;
public:
Sales_data() :salenum(0), revenue(0)
{ }
Sales_data(bname na, bnum num, bprice rev) :bookname(na),salenum(num), revenue(rev)
{ }
public:
bname getbookname() const{ return this->bookname; }
bnum getsalenum()const { return this->salenum; }
bprice getrevenue()const { return this->revenue; }
bool issame(Sales_data &sal) const;
bprice monovalent();
Sales_data& add(Sales_data &sal);
Sales_data& operator + (Sales_data &sal);
private:
bname bookname;
bnum salenum;
bprice revenue;
};
#endif
Sales_data.cpp
#include"Sales_data.h"
bool Sales_data::issame(Sales_data &sal) const
{
return (this->bookname == sal.bookname);
}
Sales_data::bprice Sales_data::monovalent()
{
return this->revenue / this->salenum;
}
Sales_data& Sales_data::add(Sales_data &sal)
{
return *this + sal;
}
Sales_data& Sales_data::operator + (Sales_data &sal)
{
try
{
if(!this->issame(sal))
throw std::runtime_error("不同书目不能相加!");
this->revenue += sal.revenue;
this->salenum += sal.salenum;
return *this;
}
catch (runtime_error err)
{
cout << "错误,请检查将要合并的书目类型!" << endl;
}
}
bool salissame(Sales_data &sal1, Sales_data &sal2)
{
return sal1.getbookname() == sal2.getbookname();
}
Sales_data::bprice salmonovalent(Sales_data &sal)
{
if (sal.getrevenue())
return sal.getrevenue() / sal.getsalenum();
else
return 0;
}
Sales_data::bprice add(const std::initializer_list<Sales_data> item)
{
Sales_data::bprice sum = 0;
for (auto a : item)
sum += a.getrevenue();
return sum;
}
main.cpp
#include"Sales_data.h"
int main()
{
Sales_data sal1("C++Primer", 10, 100);
Sales_data sal2("Qt实例与开发", 5, 200);
Sales_data sal3("C++Primer", 50, 500);
cout << sal1.getbookname() << endl;
cout << sal1.issame(sal2) << endl;
sal1 + sal2;
}