struct B {};
struct D : private B {
B* fun () { return new D; } // ok
}
struct DD : public D {
B* foo () { return 0; } // error: ‘struct B B::B’ is inaccessible !
};
Run Code Online (Sandbox Code Playgroud)
这个错误对我来说似乎不合理.如果我们可以B*在全局范围内使用简单,那么为什么不在其私有派生类中呢?g ++演示.
我们是不是要转换DD*到B*,这是由语言规则(禁止这个,这个,这个是相关的问题).
需要注意的是,如果我改变B* foo()到int foo(),事情的罚款.
#include <iostream>
using namespace std;
class Base
{
public:
Base(){cout <<"Base"<<endl;}
virtual ~Base(){cout<<"~Base"<<endl;}
virtual void foo(){ cout<<"foo base"<<endl;}
};
class Derived: private Base
{
public:
Derived(){cout<<"Derived"<<endl;}
virtual ~Derived(){cout<<"~Derived"<<endl;}
virtual void foo(){ cout<<"foo dervied"<<endl;}
};
int main(int argc, char *argv[])
{
Base *pb = new Derived;
Derived d;
d.foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我执行上面的示例程序时,我得到以下错误:protected.cpp:在函数'int main(int,char**)'中:protected.cpp:26:错误:'Base'是'Derived'的一个不可访问的基础
为什么不可能用基指针创建Derived对象????
所以我可以创建一个Derived类的instanse
Derived d
Derived d1= new Derived;
Run Code Online (Sandbox Code Playgroud)
但是从Base类指针创建实例就像
Base * b = new derived
Run Code Online (Sandbox Code Playgroud)
将失败.
这是因为当衍生出来并私有时,Derived不是来自Base的派生类.
它是否正确?????