Я создал 3 класса.Векторный объект хранения
- Все класс - хранение всех групп
- Group класса - Сохранение объектов студентов в вектор.
- Студенческий класс - хранение информации о студенте.
У меня есть проблемы со всем классом - метод printAllofThem он должен перебирать OBJETS группы и вызов метода в PRINTALL, который должен перебирать, хотя все объекты универсиады и называют printAtributes, но результат выглядит следующим образом:
all . printAllofThem ();
выход:
-------------------
-------------------
-------------------
Ожидаемый результат:
-------------------
name: Mark | age: 20 | A1
name: Alan | age: 20 | A1
name: Eric | age: 19 | A1
-------------------
name: John | age: 19 | B1
Это дает мне право выход только тогда, когда я называю его, как это в главной функции:
A1 . printAll ();
B1 . printAll ();
Код:
#include <string>
#include <iostream>
#include <vector>
using namespace std;
class Student
{
public:
Student (string name, int age, string cllass);
void printAtributes (void) const;
protected:
string nameOfStudent;
string whichClass;
int ageOfStudent;
};
//========================================================================
class Group
{
public:
Group (void);
bool addStudent (const Student & X);
void printAll(void) const;
protected:
vector<Student> vectorOfStudents;
};
//========================================================================
class All
{
public:
All (void);
bool addToAll (const Group & T);
void printAllofThem (void) const;
protected:
vector<Group> vectorOfAll;
};
//========================================================================
All::All (void)
{
}
//------------------------------------------------------------------------
bool All::addToAll (const Group & T)
{
vectorOfAll . push_back (T);
return true;
}
//------------------------------------------------------------------------
void All::printAllofThem (void) const // Function which iterate thought group objects
{
cout << "-------------------" << endl;
for (const auto & allofthem : vectorOfAll)
{
allofthem . printAll ();
cout << endl;
}
}
//------------------------------------------------------------------------
Student::Student (string name, int age, string cllass)
:nameOfStudent(name), ageOfStudent(age), whichClass(cllass)
{
}
//--------------------------------------------------------------------
void Student::printAtributes (void) const
{
cout << "name: " << nameOfStudent << " | " << "age: " << ageOfStudent << " | " << whichClass << endl;
}
//============================================================================
Group::Group (void)
{
}
//----------------------------------------------------------------------------
bool Group::addStudent (const Student & X)
{
vectorOfStudents . push_back (X);
return true;
}
//----------------------------------------------------------------------------
void Group::printAll (void) const
{
cout << "-------------------" << endl;
for (const auto & student : vectorOfStudents)
{
student . printAtributes ();
cout << endl;
}
}
//----------------------------------------------------------------------------
int main()
{
All all; // Representing all classes
Group A1;
Group B1;
all . addToAll (A1);
all . addToAll (B1);
A1 . addStudent (Student ("Mark", 20, "A1"));
A1 . addStudent (Student ("Alan", 20, "A1"));
A1 . addStudent (Student ("Eric", 19, "A1"));
B1 . addStudent (Student ("John", 19, "B1"));
A1 . printAll ();
B1 . printAll ();
all . printAllofThem ();
return 0;
}
Это звучит, как вы, возможно, потребуется, чтобы узнать, как использовать отладчик для пошагового ваш код. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Вы вызываете, например. 'all.addToAll (A1)' * перед * модификацией его с помощью 'A1.addStudent (...)'. Эти изменения не будут автоматически распространяться на копию 'A1', которая ранее была добавлена в ваш объект' all'. – nrussell
'addToAll' does' vector.push_back', который, в свою очередь, делает копию того, что вы нажимаете.Поскольку вы вызываете 'addToAll' с пустыми группами, объект' All' пуст. Попробуйте сделать 'addToAll' после того, как' addStudent ' – Nacho