令我感到惊讶的是,在下面的示例中,声明Middle的基类private使该名称在后续派生中不可用作为类型.
class Base {
public:
Base(Base const& b) : i(b.i) {}
int i;
};
class Middle : private Base { //<<<<<<<<<<<
public:
Middle(Base const* p) : Base(*p) {}
};
class Upper : public Middle {
public:
Upper(Base const* p) : Middle(p) {} //<<<<<<<<<<<
};
Run Code Online (Sandbox Code Playgroud)
用g ++编译(Debian 6.3.0-18 + deb9u1)6.3.0 20170516 ......
g++ -std=c++11 privateBase.cpp
Run Code Online (Sandbox Code Playgroud)
我得到以下诊断:
privateBase.cpp:15:9: error: ‘class Base Base::Base’ is inaccessible within this context
Upper(Base const* p) : Middle(p) {}
^~~~
privateBase.cpp:1:12: note: declared here
class Base {
^ …Run Code Online (Sandbox Code Playgroud)