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

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类中添加“ get_busStops()”方法,该方法将返回指向此向量的指针?还是矢量busStops应该是公共的?我能想到的最后一个解决方案是只返回一个存储在busStops向量中的BusStop对象的方法,该对象会将其索引作为参数。

最佳答案

我认为您应该保留std::vector<BusStop> busStops private,并在您的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 };


对每种方法执行此操作可能会令人沮丧,但是一旦实现,您的代码将更容易为您和其他程序员使用和阅读。

如果您仍然希望将指针返回给私有成员,那么将它们设为私有是没有意义的,而应该将它们设为公共-您将获得相同的写/读控制级别,但会将所有数据保存在一个位置。

10-05 19:34