管理嵌套类

Managing nested classes

这是嵌套 classes 的一个简单示例,我认为这在逻辑上是正确的:

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 对象中的方法?我是否应该向 PIS class 添加一个 "get_busStops()" 方法,从而 return 指向该向量的指针?或者矢量 busStops 应该是公开的?我能想到的最后一个解决方案是 return 只有一个 BusStop 对象的方法,存储在 busStops 向量中,它将其索引作为参数。

我认为你应该保留 std::vector<BusStop> busStopsprivate 并在你的 PIS class 中实现方法,这些方法将涵盖使用你的私有对象所需的所有操作,而不仅仅是 returning 指向整个向量甚至单个对象的指针。

要访问 BusStop 及以下版本中的方法,您可以在 PIS class 中实现镜像方法:

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 };

对每个方法都执行此操作可能会令人沮丧,但是一旦您实现了代码,您和其他程序员就可以更轻松地使用和阅读它。

如果您仍然希望 return 指向您的私有成员,那么将它们保持私有是没有意义的,您应该改为 public - 您将获得相同的结果 write/read 控制级别,但您会将所有数据保存在一个地方。