#include <iostream>
#include <string>
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 n * price;
}
private:
string isbn;
protected:
double price;
};
class Bulk_item : public Item_base
{
public:
Bulk_item(void) : Item_base("math", 3.4) {};
double net_price(size_t) const;
void print() { cout << "hello:" << price << endl; }
void memfcn(const Bulk_item &d, const Item_base &b);
private:
size_t min_qty;
double discount;
};
double Bulk_item::net_price(size_t cnt) const
{
if (cnt >= min_qty)
return cnt * price * (1-discount);
else
return cnt * price;
}
void Bulk_item::memfcn(const Bulk_item &d, const Item_base &b)
{
double ret;
ret = d.price;
// ret = b.price; 见解析3
cout << ret << endl;
}

int main()
{
Item_base base("English", 1);
Bulk_item b;
b.memfcn(b, base);
}

public继承

  • 类的私有成员只能通过类的成员访问,类的对象、派生类、派生类对象都是不行的
  • 类的保护成员对于基类来说如同private一样(见上条),对于派生类来说像public一样可以通过派生类访问,但是不可以通过类的派生类对象访问
  • 派生类(不是对象)只能通过派生类对象访问基类的protected成员,而不可以通过基类的对象访问(上例中类中只能通过对象d访问price,而不可以通过b)