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(std::size_t n) const { return n*price; };
virtual ~Item_base();
protected:
double price;
private:
std::string isbn;
}
class Disc_item : public Item_base {
public:
Disc_item(const std::string& book="",double sales_price=0.0,
std::size_t qty = 0, double disc_rate = 0.0}:
Item_base(book, sales_price),
min_qty(qty),
discount(disc_rate) {}
protected:
std::size_t quantity;
double discount;
}
class Bulk_item : public Disc_item
public:
Bulk_item(const std::string& book="",
double sales_price = 0.1,
std::size_t qty = 0, double disc_rate = 0.0):
Disc_item(book, sales_price, qty, disc_rate) { }
double net_price(std::size_t quantity) const;
这个类用来理解C++类比较好
1. Item_base构造类函数需要声明为public
2. 构造函数使用了默认实参,在构造时,不传参会使用默认实参构造
Item_base item_base = new Item_base(,);
3. : isbn(book),price(sales_price) 相当于
Item_base(const std::string &book = "", double sales_price = 0.0):
{
isbn = book;
price = sales_price;
}
特别注意构造器中变量赋值的顺序不是形参顺序,而是变量申明顺序,既如下顺序
protected:
double price;
private:
std::string isbn;
4.对于派生类来说,派生类在构造自己时,先构造基类,再构造派生类。
关于修饰符
public - 允许其他类访问
protected - 只允许子类访问
private - 不允许其他类访问,包括子类