#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)