首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求大神帮小弟我看上c++ primer 的一个程序啊

2012-09-16 
求大神帮我看下c++ primer 的一个程序啊~~~程序有点长,大神帮忙看下啊~~main 函数中ItemVec.push_back(Bul

求大神帮我看下c++ primer 的一个程序啊~~~
程序有点长,大神帮忙看下啊~~main 函数中ItemVec.push_back(Bulk_item(isbn,sales_price,qty,dis));往vector 中添加一个继承来的类报错了;
我先发头文件,再发main 部分。
#ifndef Item_bsse_H
#define Item_bsse_H
#include <string>
using namespace std;
class Item_base {
public:
Item_base(const string &book=" ",double sales_price=0):isbn(book),price(sales_price){}
string book() const{
return isbn;
}
virtual double net_price(size_t n)const{
return n*price;
}
virtual ~Item_base();
private:
string isbn;
protected:
double price;
};
class Disc_item: public Item_base{
public:
Disc_item(const string book=" ",
double sales_price=0,
size_t qty=0,double dis_rate=0):
Item_base(book,sales_price),quantity(qty),discount(dis_rate){}
double net_price(size_t n) const =0;
pair<size_t,double>discount_policy()const{
return make_pair(quantity,discount);
}
protected:
size_t quantity;
double discount;
};
class Bulk_item:public Disc_item{
Bulk_item(const string book=" ",
double sales_price=0,
size_t qty=0,double dis_rate=0):
Disc_item(book,sales_price,qty,dis_rate){}
double net_price(size_t cnt) const
{
if(cnt>=quantity)
return cnt*(1-discount)*price;
else 
return cnt*price;
}
};
#endif


#include "Item_bsse.h"
#include <iostream>
#include <string>
#include <vector>
#include <utility>
using namespace std;
int main(){
vector<Item_base>ItemVec;
string isbn;
double sales_price,dis;
size_t qty;
cout<<"enter some Bulk_item objects(ctrl+z to stop): "<<endl;
while(cin>>isbn>>sales_price>>qty>>dis){
ItemVec.push_back(Bulk_item(isbn,sales_price,qty,dis));//这里报错了
}
double sum=0.0;
for (vector<Item_base>::iterator iter=ItemVec.begin();iter!=ItemVec.end();iter++)
sum+=iter->net_price(100);
cout<<"sum of net price: "<<sum<<endl;
return 0;
}


[解决办法]
vector.push_back()不能用继承类的实体,因为大小可能不一样,没法分配内存。

热点排行