是什么把一个容器类或某些其他类的类中作为私有或公共成员的最佳方式?

要求:

1.Vector 我的类内

需要2.增加和矢量的数接口

有帮助吗?

解决方案

如果容器的状态是部分类的不变的,那么它应该,如果可能的话,是私有的。

例如,如果容器表示三维矢量则不变的部分可能是,它总是只包含3个数字。揭露它作为一个公共成员将允许外部代码的类来改变容器的大小,而这又可能导致的问题,在需要容器的大小是恒定的任何程序。保持容器私人限制,其中,容器的大小可以进行修改,以类的成员函数在软件的地方。

其他提示

一个成员是否被宣布私人或公众完全取决于你的应用程序。你能提供一些更详细?

很重要的一点声明的成员是,如果你提供一个“吸”来找回它,那么你就不再是封装对象时记住。相反,它可以很好地编写包装方法只露出你想揭露的功能。

例如,具有矢量成员,你可以写一个的AddItem和Clear方法,如果这就是你想公开的功能。

由于你在谈论的一类,我觉得应该是私有的。如果你希望它是公共的,而建立一个结构 - 使之明显,你希望的成员的使用变量

要暴露vector构件的可行替代是创建一个访问者函数(或内部迭代)。这样,您就服从得墨忒耳定律更好:

class ContWrapper {
    std::vector<int> _ints;
public:
    class Action {
    public: 
        virtual void accept( int i ) = 0;
    };
    void each_int( Action& a );
};

例如出口时,也必须非常小心从库的std::vector<T>,太:像你一样的客户端代码可能不会使用相同的STL实现,那么这些成员变量的布局可能会有所不同。

请所有成员私人和使用的存取方法,这可以让你以后改变实现。只有在非常特殊的情况下我会做任何数据成员公开。

请记住,chaning实施情况往往比你可以想象,它不只是改变容器的类型,但是也许你想改变机制的情况。假设你在列表中存储的名字,一段时间后,你可能会选择索引此列表的哈希,并希望有散,每次添加一个新的名字时更新。如果您的实施适当封装这样做很容易,如果你刚刚曝光的载体,你需要做出改变,将调整界面(和这样的变化将波及了)。

如果这是一个新的全新的你有一个读:的http:// en.wikipedia.org/wiki/Encapsulation_(classes_-_computers)

有第三条路 - 有时是更好地从容器中继承和重写它的方法来实现自己的目标(例如线程安全)。无论如何,使其公众几乎总是是不是一个好主意。

考虑要封装容器内的另一个类意味着它不能是公共的,并且还你的类的公共方法不应该暴露在容器任何特定实现。这样,你的类(即容器)的实施可以在不改变它的接口被改变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top