【发布时间】:2019-12-17 09:56:55
【问题描述】:
您好,我正在尝试从 Gradesclass 创建一个指向对象 Student 的动态指针数组,但我不知道如何在标题中声明它
这是标题:
class Grades
{
private:
Student** array;
int _numofStud;
public:
Grades();
Grades(const Grades& other);
~Grades();
和成绩构造函数(我不确定它是否正确)
Grades::Grades()
{
this->array = new Student * [2];
for (int i = 0; i < 2; ++i)
{
this->array[i] = NULL;
}
this->array[0]= new Student("auto1", "12345");
this->array[1]= new Student("auto2", "67890");
this->_numofStud = 2;
}
问题在于,在它进入构造函数之前,它在Grades 中创建了一个大小为 5 的数组,因为我在 Student 构造函数中有 5 个元素
Student::Student(const char* name, char* id)
{
this->_numofgrade = 0;
this->setName(name);
this->setId(id);
this->_grades = NULL;
this->_average = 0;
}
我不能添加或修改这个尺寸
我想将默认大小的 Grades 放入一个包含 2 个指向学生对象的指针的数组中,我将其定义为默认值,然后我将使用其他方法通过创建新学生并将其指针添加到数组来添加新学生 问题是我无法更改数组的大小,我不明白为什么
我希望我的解释很清楚,谢谢你的帮助
这是调试器,您可以看到它何时创建新对象 Grades g1 它正在创建一个由 5 个组成的数组,而不是两个 按照我的要求先填写 2 剩下的 3 个我不知道为什么要创建它们以及它们里面有什么
【问题讨论】:
-
您最好为您的
array成员使用std::vector<Student>! -
相关,在发布的代码中我想不出你为什么要使用指针数组的原因根本。
std::vector<Student>似乎更合适,并带来更接近RO3/5/0 兼容的额外好处。 -
“在它进入构造函数之前,它为我创建了一个大小为 5 的数组”:我不明白你的意思。你在说什么数组?还有“Student 构造函数中的 5 个元素”指的是什么?这些“元素”是什么?
-
您是否打算在这里了解动态大小的数据结构(例如
std::vector)实际上是如何工作的?你知道Grades()需要的大小,还是想要像addStudent(...)这样可以多次调用的函数? -
这是一个学校项目,我们还没有学习
std::vector所以我不确定我可以使用它我所说的“在进入构造函数之前”是指当我定义@987654337 @它让我自动放置一个大小为 5 的数组,我不明白如何修改这个大小学生中的 5 元素引用每个“this->”