指向派生对象的基指针
Base pointer to derived object?
如果Child
从父级继承,并且我继承:
Child* c = new Child();
Parent* p = c;
p
的目的是什么?如果Child
包含额外的数据成员,那么它们是否继承了p
,只是p
无法访问它们?
我试图理解内存中的实际内容和指针可以访问的内容之间的区别,这取决于它的静态类型。
在显示的一小段代码中,无法判断p
的用途。然而,通常情况下,使用对基类的指针或引用来存储本质上多态的对象是一种常见的做法。例如,形状的经典示例:
// Base class for all shapes.
class Shape
{
...
};
class Circle: public Shape
{
...
};
class Square: public Shape
{
...
};
现在,如果我们想存储一堆形状,我们可以使用:
std::vector<Shape*> shapes;
shapes.push_back(new Circle);
shapes.push_back(new Square);
然后做:
for(auto &s : shapes)
{
s.Draw(); // Draw shapes on screen...
}
向量需要包含指针或引用,以便由存储的实际对象来确定类型。如果我们制作一个向量std::vector<Shape> shapes
,那么我们将得到"切片",其中存储在Circle
(如radius
)或Square
(如side
)中的任何额外信息都将丢失。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它