通过指向指针数组的指针访问子类的属性

Accessing attributes of subclass through pointer to an array of pointers

本文关键字:指针 访问 子类 属性 数组      更新时间:2023-10-16

假设我想要实现一个蠕虫包。我有蠕虫,它有一个int属性ID。我还有一个类Bag:

class Bag{
// pointer to a 1D array of pointers to all the worms
Worm** population;
// constructor
Bag(){
// initiate 1D population of the worms
int N = 100;
Worm** population = new Worm*[N];
for (int i=0; i<N; i++){
Worm new_worm(i);
population[i] = &new_worm;
}
}
}

由于N在编译时是已知的,我不确定是否必须动态分配数组?

我的问题是,在稍后的代码中,我想执行:

Bag bag();
int ID = bag.population[10]->ID;

并且代码被编译,但是当我执行时,我得到CCD_ 2。我已经(通过评论(检查了问题是由ID提取的确切行引起的
我应该如何访问包中Worm类的字段和调用方法?

用这个->population或类似的东西替换Worm**population=new Worm*[N]。

您正在分配局部变量"population"而不是成员"population"->bag.population仍然为空

实际上,我认为真正的问题是使用局部变量new_worm的地址初始化population数组。我认为,分配给数组的地址是否会有差异是不确定的(初始化循环可以自由使用new_worm变量在本地堆栈上的同一位置。

尽管还有其他方法可以解决这个问题,但其中一种是更换两条线路:

Worm new_worm(i);
population[i] = &new_worm;

带有:

population[i] = new Worm(i);