访问权限案例说明

#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)
原文地址:https://www.cnblogs.com/kaituorensheng/p/3266399.html