//程序不太可能再第一次运行或第一次用真实数据运行时就能正确运行。在类得
//设计中包括调试策略经常是有用得。为item_base类层次实现一个debug虚函数,显示各个类得数据成员
#include<iostream>
#include<string>
#include<tchar.h>
#include<ostream>
using namespace std;
class item_base
{
public:
item_base(const string &book="",double sales_price=0.0):
isbn(book),price(sales_price){}
string book() const
{
return isbn;
}
virtual double net_price(size_t n)const
{
return price*n;
}
virtual ~item_base(){}
friend ostream &operator<<(ostream &, item_base&);
protected:
string isbn;
double price;
public:
virtual void debug() const
{
cout << "debug:item_base's members are:" << endl
<< "\tthe isbn is:\t" << isbn << endl
<< "\tthe price is:\t" << price << endl;
}
};
ostream &operator<<(ostream &out, item_base &ib)
{
out << "\titem_base's members are:" << endl
<< "\tthe isbn is:\t" << ib.isbn << endl
<< "\tthe price is:\t" << ib.price << endl;
return out;
}
class bulk_item :public item_base
{
public:
bulk_item(const string &book="",double sales_price=0.0,size_t qty=0,double disc=0.0):
item_base(book,sales_price),min_qty(qty),
discount(disc){}
double net_price(size_t cnt)const
{
if (cnt > min_qty)
return cnt*(1 - discount)*price;
else
return cnt*price;
}
~bulk_item(){}
public:
virtual void debug(ostream& os = cout)const {
os << "\ndebug:bulk_item's members are(the 4 members):" << endl;
item_base::debug();
os << "\tthe min_qty is:\t" << min_qty << endl
<< "\tthe discount is:\t" << discount << endl;
}
private:
size_t min_qty;
double discount;
};
int _tmain(int argc, _TCHAR* argv[])
{
item_base ib("0-001-100", 100.0);
bulk_item bi("0-001-101", 90.0, 10, 0.4);
item_base *plb = &ib;
bulk_item *pbi = &bi;
cout << *plb << endl;
cout << *pbi << endl;
plb->debug();
pbi->debug();
system("pause");
return 0;
}
15.32
最新推荐文章于 2024-07-29 09:07:44 发布