Вот простой пример вложенных классов, которые, по моему мнению, являются логически правильным:Управление вложенных классов
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
Теперь, как я могу получить доступ к методам в объекте Автобусная остановка? Должен ли я добавить метод get_busStops() в класс PIS, который вернет указатель на этот вектор? Или, может быть, векторные автобусы должны быть общедоступными? Последнее решение, о котором я могу думать, - это метод, который возвращает только один объект BusStop, хранящийся в векторе busStops, который примет его индекс в качестве аргумента.
Я предпочел бы возвращать константу-ссылку и/или ссылку из 'getBusStops()', чем указатель. И независимо от того, я бы 'addBusStop (остановка BusStop)' с перемещением семантики copy-swap. Не имеет смысла добавлять стоп произвольно, пока вы не узнаете, что это такое. Однако я не вижу решения с одним ответом на этот вопрос, поскольку, похоже, это похоже на мнение об осуществлении. – WhozCraig