为什么Base*pd = new派生; 生成错误?

sri*_*iks 1 c++ inheritance new-operator

鉴于此代码:

class Base{ 
public: 
    Base(); 
    virtual ~Base(); 
}; 

class Derived: protected Base{ 
public: 
    virtual ~Derived(); 
}; 
Run Code Online (Sandbox Code Playgroud)

在主要我试图以这种方式分配派生到基地:

Base *pd = new Derived;
Run Code Online (Sandbox Code Playgroud)

为什么这个语句会产生错误?

这里new将返回一个对象类型的指针,我们总是可以将一个派生指针分配给一个基类.如果我错了,请纠正我.

CB *_*ley 9

要将指向一个类的指针转换为指向不同类类型的指针,必须在调用它时访问该转换.

由于Base是一个保护基Derived不能初始化类型的变量Base *从表达式new Derived(其类型Derived *的成员函数的外部)Derived,从它或派生的类friendDerived.