默认的类inheritance访问
假设我有一个基类和派生类:
class Base { public: virtual void Do(); } class Derived:Base { public: virtual void Do(); } int main() { Derived sth; sth.Do(); // calls Derived::Do OK sth.Base::Do(); // ERROR; not calls Based::Do } 如所见,我希望通过派生来访问Base :: Do。 我得到一个编译错误,因为“class Base in accessible”,但是当我声明Derive为
 class Derived: public Base 
它工作正常。
我读过默认inheritance访问权限是公共的,那么为什么我需要在这里显式声明公有inheritance?
你可能读过一些不完整的或误导的东西。 引用“The C ++ programming Language”中的Bjarne Stroustrup,第四版,p。 602:
在
class,成员默认是private; 在struct,成员默认是public(第16.2.4节)。
这也适用于没有访问级别说明符的成员inheritance。
 一个普遍的约定是,只使用结构来组织纯数据成员。 您正确使用了一个class来build模和实现对象行为。 
从标准文档11.2.2
在没有基类的访问说明符的情况下,在派生类用类别键 结构定义的情况下假定为public,并且当用class-key类定义类时假定为private 。
 所以,对于struct s默认是public和class es,默认是private … 
标准文档本身的例子,
 class D3 : B { / ... / }; // B private by default 
 struct D6 : B { / ... / }; // B public by default 
  C ++中的class的默认inheritance级别(缺less基类的访问说明符)是私有的。  [对于struct是公共的] 
 class Derived:Base 
  Base是私人inheritance,所以你不能做sth.Base::Do(); 在main()里面,因为Base::Do()在Derived是私有的 
inheritance的默认types是私有的。 在你的代码中,
B类:A
不过是
B类:私人A