sky*_*oor 4 c++ polymorphism inheritance
我刚刚发现我对C++中的一个基本问题感到困惑
class Base {
};
class Derived : public Base {
}
Base *ptr = new Derived();
Run Code Online (Sandbox Code Playgroud)
这是什么意思?ptr指向Base类或Derived类?在这一行,为ptr分配了多少内存?根据Derived或Base的大小?
这和之间有什么区别:
Base *ptr = new Base();
Derived *ptr = new Derived();
Run Code Online (Sandbox Code Playgroud)
有这样的情况吗?
Derived *ptr = new Base();
Run Code Online (Sandbox Code Playgroud)
谢谢!
jld*_*ont 13
因为Base *ptr = new Derived();内存是根据Derived类分配的.ptr指向该对象但指示编译器仅对Base该类中声明的对象成员"授予访问权限"(可见性).
当然,与指针相关联的存储器ptr是相同的,即独立于指示它指向的对象.通常,"指针对象"的大小在CPU架构上是恒定的,例如32位/ 64位(例如,在嵌入式设备上更小).
对于Derived *ptr = new Base();:不,这是无效的.
类Derived不仅仅是一个类,Base而是定义为派生自Base:因此,Derived对象实例的指针实例不能仅仅分配给类的对象实例Base.