班上可以有两个公共部门吗?如果是,那为什么呢?在哪种情况下我们这样做?

Abh*_*eet 13 c++ class public

关于课程,有些事情让我烦恼.例如

class A
{
public:
  A()
  {
  .....
  .....
  }

  void cleanup()
  {
  ....
  ....
  ....
  }

public:
  UINT a;
  ULONG b;
};
Run Code Online (Sandbox Code Playgroud)

在上面的例子中有两个公共部分.在第一部分中,我定义了一个构造函数和一个方法,在第二部分中,我将声明数据成员.上面的类是A正确的.我们可以这样做吗?如果是,那么为什么需要这样做以及在什么情况下我们应该使用它?既然我们可以在一个部分完成整个事情,那么为什么有两个部分呢?

Mar*_*tos 27

访问限定符只适用于下一个限定符之后的代码.对此类限定符的数量或顺序没有限制.

通常没有必要在类中重复相同的访问限定符,这样做可能会使读者感到困惑.它们也可能对类的布局产生影响,因为遵循相同限定符的数据成员必须按声明的顺序排列,但限定符之间没有这样的限制.

  • +1不同访问说明符标签中未指定的成员布局是一个重要细节. (3认同)
  • 如果你有一些私有的东西依赖于公共的东西,而公共的东西又依赖于私有的东西,那么有重复的部分是有意义的。当您有大量 typedef 和枚举时,可能会发生这种情况 (3认同)

Ski*_*izz 11

正如马塞洛所说,你可以根据自己的意愿多次使用公共,私人和受保护的资格赛."什么时候"完全是个人的.有些人喜欢这样:

class AClass
{
public:
   // all the public stuff
protected:
   // all the protected stuff
private:
   // all the private stuff
};
Run Code Online (Sandbox Code Playgroud)

但个人(这真的只是个人喜好)我喜欢这样做:

class AClass
{
   // constructors and destructors
public:
   // public cons/dest
protected:
   // protected cons/dest
private:
   // private cons/dest

   // accessors
public:
protected:
private:

   // methods
public:
protected:
private:

   // members
public:
protected:
private:
};
Run Code Online (Sandbox Code Playgroud)

无论您喜欢什么,都可以随意提出自己的风格.没有正确或错误的方法.试着保持一致.


Mat*_* M. 7

我通常会尝试安排类的声明,以便其他人可以轻松使用该类。

通常是这样的:public/protected/private,按这个顺序,因为它简化了读者的生活。

  • 使用该类的人可以在到达protected标签后停止阅读,之后的任何事情都与他们无关。
  • 从类派生的人一旦到达private标签就可以停止阅读,后面的任何内容都是实现细节。

再加上不在声明点编写方法的代码,就形成了一个易于阅读的界面。

不过,还有一些技巧:

  • 当使用元模板编程时,你可能需要先声明类型,然后声明方法,所以你最终会得到 2 系列public/protected/private
  • 当使用Key习语(而不是friend)时,您public实际上有一个部分仅专用于一小部分用户,最好将其隔离在正常public部分的底部或该protected部分之后。

最后评论一下属性之间的布局问题。封装意味着属性应该是private。所以,要么你有一个struct并且一切都是public,要么你有一个类并且一切都是private,混合这两者意味着破坏封装,这是一个正在形成的错误。


And*_*rsK 6

是的,这是正确的,但我个人更喜欢在课程顶部只有一个公共部分,这是程序员在检查新课时首先看到的.然后更容易看出哪些部分应该是可访问的,哪些部分不是 - 而不是浏览整个类头.