#include
#include
#include
#include
#include
class Item_base
{
public:
Item_base(const std::string &book="",double sales_price=0.0)
:isbn(book),price(sales_price){}
std::string book() const {return isbn;}
virtual double net_price(size_t n) const {return n*price;}
virtual ~Item_base(){}
private:
std::string isbn;
protected:
double price;
};
class Disc_base:public Item_base
{
public:
Disc_base(const std::string &book="",double sales_price=0.0,size_t qty=0,double dis=0.0)
:Item_base(book,sales_price),quantity(qty),discount(dis){}
std::pair discount_policy() const
{return std::make_pair(quantity,discount);}
virtual double net_price(size_t n) const =0 ;//定义为纯虚函数,使之成为虚基类
protected:
size_t quantity;
double discount;
};
class Lds_item:public Disc_base
{
public:
Lds_item(const std::string &book="",double sales_price=0.0,size_t qty=0,double dis=0.0)
:Disc_base(book,price,qty,dis){}
virtual double net_price(size_t n) const;
};
double Lds_item::net_price(size_t n) const
{
if(n >= quantity)
return quantity*(1-discount)*price+(n-quantity)*price;
else
return n*price*(1-discount);
}
class Bulk_item:public Disc_base
{
public:
Bulk_item(const std::string &book="",double sales_price=0.0,size_t qty=0,double dis=0.0)
:Disc_base(book,price,qty,dis){}
virtual double net_price(size_t n) const;
};
double Bulk_item::net_price(size_t n) const
{
if(n >= quantity)
return n*(1-discount)*price;
else
return n*price;
}
int main()
{
std::vector[I] Ivec;
std::cout>isbn>>price>>qty>>dis)
{
if(std::cin)
Ivec.push_back(Bulk_item(isbn,price,qty,dis));
else
{
std::cerrnet_price(10);
}
std::cout<<sum<<std::endl;
return 0;
}
但输入01 10 5 0.5然后crtl+z输入完后,为什么sum是乱七八糟的数字,我跟踪调试了,发现Ivec中的元素price貌似没有初始化,但是isbn初始化了,这是为啥?
我又试了下,把
if(std::cin)
Ivec.push_back(Bulk_item(isbn,price,qty,dis));
换成了
if(std::cin)
{
Item_base IB=Bulk_item(isbn,price,qty,dis);
Ivec.push_back(IB);
}
发现是用派生类对象对基类对象赋值时,出现了问题,price并没有初始化,但是isbn初始化了,这是为什么?求高手解答下
|