64,686
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Bulk_item;
class Item_base
{
public:
Item_base(const string &book = "",
double sales_price = 0.0) : isbn(book), price(sales_price)
{
cout << "Item_base构造函数Item_base(const string &, double)" << endl;
}
string book() const { return isbn; }
virtual double net_price(size_t n) const { return n * price; }
Item_base(const Item_base &ib) : isbn(ib.isbn), price(ib.price)
{
cout << "Item_base复制构造函数Item_base(const Item_base &)" << endl;
}
Item_base& operator=(const Item_base &rhs)
{
isbn = rhs.isbn;
price = rhs.price;
cout << "Item_base赋值操作符Item_base::operator=" << endl;
return *this;
}
virtual ~Item_base() { cout << "Item_base析构函数~Item_base()" << endl; }
//////////////////////////////////////////////////////////////////////////
protected:
double price;
private:
string isbn;
};
class Bulk_item : public Item_base
{
public:
Bulk_item(const string &book = "",
double sales_price = 0.0, size_t qty = 0,
double disc_rate = 0.0) : Item_base(book, sales_price),
min_qty(qty), discount(disc_rate)
{ cout << "Bulk_item构造函数Bulk_item(const string &, double, size_t, double)" << endl; }
double net_price(size_t cnt) const
{
if (cnt > min_qty)
return cnt * (1 - discount) * price;
else
return cnt * price;
}
Bulk_item(const Bulk_item &ib) : Item_base(ib), min_qty(ib.min_qty), discount(ib.discount)
{
cout << "Bulk_item复制构造函数Bulk_item(const Bulk_item &)" << endl;
}
Bulk_item& operator=(const Bulk_item &rhs)
{
if (this != &rhs)
Item_base::operator=(rhs);
min_qty = rhs.min_qty;
discount = rhs.discount;
cout << "Bulk_item赋值操作符Bulk_item::operator=()" << endl;
return *this;
}
virtual ~Bulk_item() { cout << "Bulk_item析构函数~Bulk_item()" << endl; }
//////////////////////////////////////////////////////////////////////////
private:
size_t min_qty;
double discount;
};
int main()
{
vector<Item_base> ivec;
string book;
size_t n;
double dis, price;
while (cin >> book >> price >> n >> dis)
{
Bulk_item temp(book, price, n, dis);
ivec.push_back(temp);
}
double sum = 0.0;
for (vector<Item_base>::iterator it = ivec.begin(); it != ivec.end(); ++it)
sum += it->net_price(100);
cout << sum << endl;
return 0;
}
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Bulk_item;
class Item_base
{
public:
Item_base(const string &book = "",
double sales_price = 0.0) : isbn(book), price(sales_price)
{
cout << "Item_base构造函数Item_base(const string &, double)" << endl;
}
string book() const { return isbn; }
virtual double net_price(size_t n) const { return n * price; }
Item_base(const Item_base &ib) : isbn(ib.isbn), price(ib.price)
{
cout << "Item_base复制构造函数Item_base(const Item_base &)" << endl;
}
Item_base& operator=(const Item_base &rhs)
{
isbn = rhs.isbn;
price = rhs.price;
cout << "Item_base赋值操作符Item_base::operator=" << endl;
return *this;
}
virtual ~Item_base() { cout << "Item_base析构函数~Item_base()" << endl; }
//////////////////////////////////////////////////////////////////////////
protected:
double price;
private:
string isbn;
};
class Bulk_item : public Item_base
{
public:
Bulk_item(const string &book = "",
double sales_price = 0.0, size_t qty = 0,
double disc_rate = 0.0) : Item_base(book, sales_price),
min_qty(qty), discount(disc_rate)
{ cout << "Bulk_item构造函数Bulk_item(const string &, double, size_t, double)" << endl; }
double net_price(size_t cnt) const
{
if (cnt > min_qty)
return cnt * (1 - discount) * price;
else
return cnt * price;
}
Bulk_item(const Bulk_item &ib) : Item_base(ib), min_qty(ib.min_qty), discount(ib.discount)
{
cout << "Bulk_item复制构造函数Bulk_item(const Bulk_item &)" << endl;
}
Bulk_item& operator=(const Bulk_item &rhs)
{
if (this != &rhs)
Item_base::operator=(rhs);
min_qty = rhs.min_qty;
discount = rhs.discount;
cout << "Bulk_item赋值操作符Bulk_item::operator=()" << endl;
return *this;
}
virtual ~Bulk_item() { cout << "Bulk_item析构函数~Bulk_item()" << endl; }
//////////////////////////////////////////////////////////////////////////
private:
size_t min_qty;
double discount;
};
int main()
{
vector<Item_base> ivec;
string book;
size_t n;
double dis, price;
while (cin >> book >> price >> n >> dis)
{
Bulk_item temp(book, price, n, dis);
//ivec.push_back(temp); //问题在这,你去看看有关将一个对象压入vevtor的内容吧
}
double sum = 0.0;
for (vector<Item_base>::iterator it = ivec.begin(); it != ivec.end(); ++it)
sum += it->net_price(100);
cout << sum << endl;
system("pause");
return 0;
}