1、派生类的成员或友元只能通过派生类对象来访问基类的受保护成员。

  派生类对于一个基类中的受保护成员没有任何访问特权。

2、派生访问说明符的目的是控制派生类用户(包括派生类的派生类在内)对于基类成员的访问权限。

Pub_Derv d1;                     //继承自Base的成员是public的
Pric_Derv d2;                     //继承自Base的成员是private的
d1.pub_mem();                  //正确:pub_mem在派生类中是public的
d2.pub_mem();                  //错误,pub_mem在派生类中是private的

3、只有当派生类公有地继承基类时,用户代码才能使用派生类向基类的转换。如果继承方式是私有或保护的,则用户代码不能使用该转换。

  不论派生类以什么方式继承基类,派生类成员函数和友元都能使用派生类向基类的转换。

   如果继承方式是公有的或者受保护的,则派生类的派生类可以使用派生类向基类的类型转换,私有则不行。

4、友元关系不能传递也不能继承。

5、可以用using声明改变个别成员的可访问性。

class Base{
public:
        size_t size() const {return n;}
protected:
        size_t n;
};
class Derived : private Base{
public:
        using Base::size;
protected:
        using Base::n;
}

6、派生类的作用域嵌套在基类的作用域之内,如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义。

7、一个对象,引用或指针的静态类型决定了该对象的哪些成员是可见的,即使静态类型与动态类型可能不一致。

//Disc_quote 定义了discount_policy(),Bulk_quote继承Disc_quote
Bulk_quote bulk;                  
Bulk_quote* bulkP = &Bulk;                 //静态类型与动态类型一致
Quote* itemP = &bulk;                      //静态类型与动态类型不一致
bulkP->discount_policy();                  //正确:bulkP的类型是Bulk_quote
itemp->discount_policy();                  //错误:itemP的类型是Quote
01-05 13:09