#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的派生类.
它是否正确?????
为什么不可能用基指针创建Derived对象????
因为基地是private
.这明确禁止Base
从外部将您的类视为实例.从外面看,你的类Derived
是没有的子类Base
,只能从类本身里面.
protected
继承的计数相同,唯一的区别是基类现在不再属于自己的类,而是属于任何派生类.但是,对于外部,它的行为就像私有继承.
归档时间: |
|
查看次数: |
1646 次 |
最近记录: |