所以我有class Star
继承了另一个class CelestialBody
。还有第三个class Planet
。
在我的班级Star中的私人部分,我有一组行星对象Planet* system
和一个int n
代表行星的数量。
问题是 - 我该如何构建它?我试过这个:
Star(char* newName, double newX, double newY, double newDiam, Planet* newSystem, int newN) : CelestialBody(newName, newX, newY, newDiam)
{
system = new Planet[newN];
system = newSystem;
n = newN;
}
但显然它不起作用......
感谢您提前帮助我!
答案 0 :(得分:1)
这种重新分配是错误的:
system = new Planet[newSystem]; // <<== should be newN
system = newSystem;
你创建了一个数组,然后立即&#34;泄露了#34;它。您可以通过添加循环来解决此问题,如下所示:
system = new Planet[newN];
for (int i = 0 ; i != newN ; i++) {
system[i] = newSystem[i];
}
虽然这可行,但它不是最佳解决方案:一个原因是您的代码需要管理system[]
数组,并在完成Star
后删除它。 C ++标准库提供了更好的选择。
例如,您可以将system
设为std::vector<shared_ptr<Planet>>
- 即指向Planet
的共享指针的向量。调用者会传递一个行星容器(它可能是指针和计数,就像你做的那样,但它也可能是一个真正的C ++容器)。