请让我理解将派生类对象分配给基类指针-C++

COD*_*ror 1 c++ inheritance pointers

假设您有一个基类Base和派生类Derived.

Base b;
Derived *d;
d=&b; // this line gives error, why? I think it asks for typecasting, why?
//When you assign derived class object address to base class pointer, it works fine. Why not the above case works fine
Run Code Online (Sandbox Code Playgroud)

虽然下面的代码工作,

Derived *d=new Base(); //no typecasting required here, why?
Run Code Online (Sandbox Code Playgroud)

上述两种情况有什么区别?

谢谢!

jua*_*nza 6

Base 是不是 Derived,所以这不是:

Base b;
Derived *d;
d=&b; 
Run Code Online (Sandbox Code Playgroud)

也不是这样

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

任何意义或作品.两者都会产生类似的结果

错误:从'Base*'到'Derived*'的无效转换[-fpermissive]

两者都做了完全相同的事情:分配Base*给a Derived*.