gpt4 book ai didi

c++ - 声明指向基类和派生类的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:40 27 4
gpt4 key购买 nike

我刚刚发现我对C++中的一个基本问题感到困惑

class Base {

};

class Derived : public Base {

}

Base *ptr = new Derived();

这是什么意思? ptr 是指向基类还是派生类?在这一行,为 ptr 分配了多少内存?基于 Derived 或 Base 的大小?

这和下面有什么区别:

Base *ptr = new Base();
Derived *ptr = new Derived();

有这样的案例吗?

Derived *ptr = new Base();

谢谢!

最佳答案

对于 Base *ptr = new Derived(); 内存是根据 Derived 类分配的。 ptr 指向该对象,但指示编译器仅“授予访问权限”(可见性)给在 Base 类中声明的对象成员。

当然,与指针 ptr 关联的内存是相同的,即独立于它被指示指向的对象。通常,“指针对象”的大小在 CPU 架构上是恒定的,例如32 位/64 位(或更小的嵌入式设备)。

对于 Derived *ptr = new Base();:不,这是无效的。

Class Derived 不仅仅是一个类 Base,而且被定义为 deriving 来自 Base:因此,指向 Derived 对象实例的指针实例不能仅分配给类 Base 的对象实例。


您可能会考虑仔细阅读非常好的维基百科贡献 on PolymorphismInheritance .

关于c++ - 声明指向基类和派生类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com