Как добавить элемент класса в вектор внутри другого частного класса - PullRequest
0 голосов
/ 01 марта 2020

Я создал университетский класс, состоящий из вектора, где степень - это другой класс, состоящий из вектора. Все векторы являются частными, и я хотел бы использовать сеттеры и геттеры для их изменения. При тестировании его функциональности в main () я заметил странное поведение:

University ua;
ua.setDegree(Degree("Computer Science"));
ua.getDegree(0).setStudent(Student("1101","Ria",true));
ua.getDegree(0).setStudent(Student("1102","Ava",false));
ua.setDegree(Degree("Biotechnology"));
ua.getDegree(1).setStudent(Student("1104","Vry",false));
ua.showDegrees();

При добавлении новых степеней к объекту ua я вижу результат при их отображении, однако, когда я добавляю новых учеников к этим степеням, я не вижу никаких изменений Обе степени остаются пустыми. Мне кажется, что я редактирую их локальную копию и поэтому не вижу добавленных учеников. Тем не менее, я не знаю, как я мог это исправить ... Вот этот код сеттеров:

class University {
private:
    vector<Degree> all;
    int n;
public:
    Degree getDegree(int i) {return all.at(i);}
    void setDegree(Degree degree) {all.push_back(degree); n++;}
    int getN() {return n;}
    void showDegrees() { for(int i=0; i<n; i++) {cout<<endl<<getDegree(i).getName()<<endl;} }
    University() { this->n = 0; } };

class Degree {
private:
    string name;
    vector<Student> all;
    int n;
public:
    string getName() {return name;}
    void setName(string name) {this->name = name;}
    Student getStudent(int i) {return all.at(i);}
    void setStudent(Student student) {all.push_back(student); n++;}
    vector<Student> getAll() {return all;}
    int getN() {return n;}
    Degree(string);
    Degree() {} };

Degree::Degree(string name) {
    this->name = name;
    n = 0;
}

1 Ответ

0 голосов
/ 01 марта 2020

Ваши геттеры возвращают копии объектов, содержащихся в вашем классе. Если вы хотите иметь возможность напрямую изменять объекты класса, вам нужно вернуться по ссылке:

Degree &getDegree(int i);

Student &getStudent(int i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...