c++ - 创建一个超类的指针数组以堆分配继承的类
问题描述
基本上,我想使用一个超类的指针数组并将它们用于子类。
我有一个操作几何形式的代码。它是一个“几何形式”超类,由虚拟方法和静态整数组成。
稍后在代码中,我创建了继承的类(圆形、正方形......),以补充应用程序。
我想创建一个“几何形式”指针数组,并将第i
' 项(基于静态属性的索引)传递给特定的子函数,基于一个switch
案例,负责该几何图形的方法,使用那个i
'th 指针.
示例:我想使用正方形,所以我通过了一个menuSquares(geometricFroms *array[foo::getStatic()]){}
...
在那个函数里面,我想做:
ptrPassed = new Circle();
我怎样才能做到这一点?
我尝试使用通用int
指针而不是超类类型:
Class GeomFig {};
Class Circle : public GeomFig
{};
int main(){
GeomFig *arrayPtrs[100];
// selection of which shape the user wants to use
// ...
menuSquares(arrayPtrs[GeomFig::getStatic()]) {}...
}
// code def
menuSquares(GeomFig* &geomPtr)
{
geomPtr = new Circle();
}
解决方案
您menuSquares()
正在按值GeomFig*
获取其参数,因此该参数仅是本地的,调用者不会看到其中分配给它的任何内容。menuSquares()
menuSquares()
如果您希望调用者看到新的指针值,则需要通过引用传递指针:
void menuSquares(GeomFig* &geomPtr)
{
geomPtr = new Circle();
}
否则,menuSquares()
在其返回值中返回所需的指针,而不是使用输出参数:
GeomFig* menuSquares()
{
return new Circle();
}
...
arrayPtrs[GeomFig::getStatic()] = menuSquares();
推荐阅读
- c - 针对古老的 C 对象构建
- react-native - 在 Navigation Drawer v5 中的 Navigator.Screen 之间插入元素
- python - 提交表单时恢复到 ?page=1 的干净方法(使用 flask-paginate)
- javascript - Javascript 从缩略图在新窗口中查看图像?
- apache-spark - 如何在 AWS Glue PySpark 中运行并行线程?
- .net - 启动时 WPF FileNotFound
- flutter - 线性百分比指示器中的颤动进度颜色
- sql - 将日期提取为数字或日期时间
- php - Laravel 7.2.2:使用 auth()->login() 和 redirect() 和 route('login') 时带有 AuthenticateSession 中间件的 AuthenticationException
- ios - IOS加载WKWebView不可信https页面