Ваша функция addClass
написана так, как если бы она была Java
void Student::addClass(string & cl_name, char grade_)
{
Record* r = new Record();
r->class_name = cl_name;
r->grade = grade_;
st_records.push_back(*r);
}
Это верно в Java, но утечка памяти в C ++. Вот правильный C ++.
void Student::addClass(const string & cl_name, char grade_)
{
Record r;
r.class_name = cl_name;
r.grade = grade_;
st_records.push_back(r);
}
В C ++ не каждый объект должен быть выделен с new
. На самом деле часто считается плохим стилем явно использовать new
в C ++.
Я понятия не имею, почему вы думаете, что этот код (или ваша версия) может не добавлять запись в список. В этом отношении C ++ и Java работают точно так же.
Ваша функция printRecords
неверна, но опять-таки правильный код такой же, как и код Java, поэтому я все еще не уверен что это вы не получаете. Вот правильный код
void Student::printRecords() const
{
for (auto it = st_records.begin(); it != st_records.end(); it++)
{
cout << "Class: " << it->class_name << " Grade: " << it->grade;
}
}
Очевидно, что список, который вы хотите напечатать, является списком классов, а не списком, переданным в качестве параметра. Единственный новый аспект этого метода заключается в том, что в C ++ он должен быть объявлен const
, поскольку он не изменяет объект.
Я могу только думать, что различия между C ++ и Java ошеломили вас и вы упускаете места, где они одинаковы. Хотя есть много технических отличий, они похожи в том, как они реализуют ориентацию объекта.