受保护的派生类

ana*_*and 5 c++ inheritance

 #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的派生类.

它是否正确?????

Kon*_*lph 6

为什么不可能用基指针创建Derived对象????

因为基地是private.这明确禁止Base从外部将您的类视为实例.从外面看,你的类Derived没有的子类Base,只能从类本身里面.

protected继承的计数相同,唯一的区别是基类现在不再属于自己的类,而是属于任何派生类.但是,对于外部,它的行为就像私有继承.