我们应该在 c++ 类中指定"private"标签吗?有什么区别吗?

Should we specify the "private" label in c++ classes? Does it make any difference?

本文关键字:标签 private 区别 什么 c++ 我们      更新时间:2023-10-16

这可能不是最大的问题,但是由于c++中的类在默认情况下具有所有属性和方法,因此指定它有任何意义吗?

这只是个人喜好的问题吗?指定私有部分会使代码看起来更熟练还是更不熟练?

class User
{   
        string name;
        string surname;
        int miles;
        double balance; 
    public:
        User(string,string,int,double);
};

class User
 {    
     private:
        string name;
        string surname;
        int miles;
        double balance; 
    public:
        User(string,string,int,double);
};

这都是风格和个人喜好的问题。

例如,在我的团队中,考虑到人们通常从上到下阅读,我们更喜欢public而不是private,并且更多的人会对如何使用类感兴趣而不是如何实现类(就像大多数人对驾驶汽车感兴趣,而不是学习内燃机如何工作)。因此,我们无论如何都被迫使用private,因为我们列出了底部的那些,除非我们使用默认访问是公共的struct(在这种情况下,我们可以省略public说明符,但我们通常不使用structs来节省输入,以指示简单的数据聚合)。

但这就是我们如何滚动。一切由你决定。有些人可能会发现看到private说明符的显式性有助于避免必须假定class的默认访问权限的错误,例如,它确实根据您的团队动态,您想要强调的内容等而变化。

我认为风格偏好的唯一不那么主观的方面是,如果有一种风格更优越,那就是你的团队始终遵循的任何风格。如果一个风格标准有什么最终要实现的,那就是:一致性。如果您要向世界其他地方发布头文件(例如:作为软件开发工具包的一部分),这一点尤其正确。在这里,您不希望每个标题看起来像是由遵循不同标准的完全独立的人编写的。所以有时候,如果你的团队很难始终遵循一个带有许多特殊规则和例外的"外来"标准,那么不管它有多酷,都值得避免。也可能不会。

可以增加可读性。其他一些语言,如java,必须显式地使类成员private。因为有一个名为default的访问修饰符——当我们不在类成员之前写任何访问修饰符时。因此,如果我们显式地使用访问修饰符private,对于那些来自其他编程语言的人来说,这将更容易理解。当然,这是C++的偏好问题。

这只是一个偏好的问题。

struct Foo
{
public:  // These are already public; no need to write it
    void a();
    int b;
private: // You need this one though
    char c;
};
同样:

class Bar
{
private: // These are already private; no need to write it
    void a();
    int b;
public:  // You need this one though
    char c;
};