【问题标题】:Why defining private members below public members in C++?为什么在 C++ 中在公共成员之下定义私有成员?
【发布时间】:2010-10-22 01:23:51
【问题描述】:

在 C++ 中,有时在类定义中,首先声明公共成员,然后声明私有成员。但是变量或数据成员通常是私有的并由公共方法使用。因此,在这种情况下,使用了变量,但还没有声明。因此代码变得难以理解。但后来我找到了著名的程序员、网站或书籍来声明私有成员。有人知道是什么原因吗?

【问题讨论】:

标签: c++ private


【解决方案1】:

同意。私有成员应该在底部声明。我发现首先声明私有成员的唯一充分理由是当函数需要获取或返回自定义数据类型时,例如:vector。编译器会询问你这是什么类型的数据。

但即便如此,我更愿意这样做:

{
private: /// advicing ofc theres more private below!
   earlier declare just of the type

public:


private:

};

【讨论】:

    【解决方案2】:

    私有成员和实现应该从头文件中隐藏。将私有成员定义放在底部是一种快速的方法。也许最好使用Pimpl idiom 并将类的私有部分隐藏在内部结构中。

    【讨论】:

      【解决方案3】:

      我们从上到下阅读文本,因此最相关的信息应该在顶部。在类定义中,这就是公共接口。

      【讨论】:

        【解决方案4】:

        我们是对立的:My Question

        我的理由是,当您熟悉一个类时,首先介绍公共接口然后在需要时深入了解私有成员会更有益。如果您从查看私有成员开始,您将无法了解它们是如何使用的。

        【讨论】:

          【解决方案5】:

          通常私人成员无关紧要。如果我正在查看一个类以确定如何在代码中的其他地方使用它,我不关心它的内部结构,所以将私有成员放在底部,因为我不需要了解它们。如果我正在修改一个班级,那么我会花时间找到私人成员并知道他们会排在最后,而不必浏览整个班级。

          【讨论】:

            【解决方案6】:

            我这样做是因为我班级的用户不关心私有成员,他们对公共 API 感兴趣(即如何使用我的班级)。

            另外,在头文件中,我通常只是声明成员函数,而不是定义它们,所以无论如何我都不会访问任何私有成员。

            【讨论】:

            • +1:头文件应该作为类用户的契约。那里没有任何实现。
            • 当然,内联函数除外。然而,除了最琐碎的情况外,这些都应该在类的定义之后。
            • 除了模板和大量的库等等。如果您一直喜欢重复,那么复制并非易事。仅仅因为您可以看到可访问性并不意味着您应该修改它(如果您在字里行间阅读,那里的托管语言会有类似的反射)......祝C++中的“合同”思维好运......
            • 为什么不首先使用struct 关键字?
            猜你喜欢
            • 1970-01-01
            • 2010-10-07
            • 1970-01-01
            • 1970-01-01
            • 2013-06-08
            • 1970-01-01
            • 2012-01-31
            • 2013-10-10
            • 1970-01-01
            相关资源
            最近更新 更多