C ++ - используя std :: list, как вы печатаете связанный список закрытых членов объекта? - PullRequest
0 голосов
/ 28 октября 2019

Это работает, когда я делаю членов юнита публичными. Как изменить переменные на приватные, как мне получить к ним доступ / распечатать?

Мой профессор не преподавал метод итераций по связанному списку объектов (в данном случае) и как получить доступ к закрытым членам этого объекта. Я делаю реализацию геттеров и сеттеров? Я действительно потерян, так как я довольно новичок в связанных списках и использовании библиотеки списков.

#include <iostream>
#include <list>
#include <string>

using namespace std;

class Unit {
private:
    string name;
    int quantity;
public:
    Unit(string n, int q){
        name = n;
        quantity = q;
    }
};


void showTheContent(list<Unit> l)
{
    list<Unit>::iterator it;
    for(it=l.begin();it!=l.end();it++){
        //
        cout << it->name << endl;
        cout <<  it->quantity << endl;
//        cout << &it->quantity << endl;  // shows address
    }
}

int main()
{
    // Sample Code to show List and its functions

    Unit test("test", 99);

    list<Unit> list1;
    list1.push_back(test);
    showTheContent(list1);

}

1 Ответ

1 голос
/ 28 октября 2019

Цель частного спецификатора состоит в том, чтобы запретить доступ к членам за пределами этого класса. Ваш дизайн класса Unit смешен, потому что вы скрываете участников от всех, и вы не используете их внутри этого класса.

Вы можете открыть доступ к членам, вы можете добавить геттеры / сеттерывнедрить шаблон посетителя - есть много вариантов. Самое простое - открыть доступ (сделать все общедоступным): вы должны судить по заданию, которое вам дал ваш профессор.

Кстати, в вашей функции showTheContent вы делаете полную копиюсписок, который вы, вероятно, не планируете делать. Вместо этого используйте константную ссылку:

void showTheContent(const list<Unit>& l)
...