Управление вложенными классами

Вот простой пример вложенных классов, которые, на мой взгляд, логически верны:

class PIS{ // passenger information system
public:
class BusStop;
void add_busStop();
//... other methods
private:
std::vector<BusStop> busStops; //There are many bus stops
};

class PIS::BusStop{
public:
struct BusInfo;
std::string get_stopName();
//... other methodes
private:
std::vector<BusInfo> informationBoard;
};

struct PIS::BusStop::BusInfo{
std::string mfrom;
std::string mto;
//... etc.
};

Я не уверен, как я должен реализовать интерфейс для этого. Основная проблема здесь — доступ к частным объектам. Ниже вы можете увидеть, о чем я говорю:

PIS oPIS; //PIS object;
oPIS.add_busStop(); //New BusStop object is pushed to the vector busStops

Теперь, как мне получить доступ к методам объекта BusStop? Должен ли я добавить метод «get_busStops ()» в класс PIS, который будет возвращать указатель на этот вектор? Или, может быть, вектор busStops должен быть публичным? Последнее решение, о котором я могу подумать, — это метод, который возвращает только один объект BusStop, сохраненный в векторе busStops, который будет принимать его индекс в качестве аргумента.

0

Решение

Я думаю ты должен уйти std::vector<BusStop> busStopsличное и в вашем PIS Класс реализует методы, которые будут охватывать все операции, которые будут необходимы для работы с вашими частными объектами, вместо того, чтобы просто возвращать указатель на весь вектор или даже один объект.

Для доступа к методам в BusStop и ниже вы можете реализовать зеркальные методы в PIS учебный класс:

class PIS{ // passenger information system
public:
class BusStop;
std::string get_StopName(int iBusStopIndex){return busStops[iBusStopIndex].get_StopName();};
void add_busStop();
//... other methods
private:
std::vector<BusStop> busStops; //There are many bus stops };

Может быть неприятно делать это для каждого метода, но ваш код будет проще использовать и читать для вас и других программистов, как только вы его реализуете.

Если вы все еще хотите возвращать указатели своим закрытым членам, то нет смысла сохранять их закрытыми, и вместо этого вы должны сделать их общедоступными — вы достигнете того же уровня контроля записи / чтения, но вы будете хранить все свои данные в одном месте.

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector