为什么构造函数和析构函数通常在类中首先声明?

时间:2013-02-18 10:37:35

标签: c++ constructor header declaration

我总是在类中的任何其他内容之前看到构造函数和析构函数。这只是一个很好的编码标准,每个人都使用它来更容易找到它们,或者是否有其背后的原因。例如,在构造函数之前声明变量是否有任何问题,如下面的代码所示?

class A
{
     public:
         int aVar;
         A() :aVar(20) {}
         ~A() {}
};

7 个答案:

答案 0 :(得分:3)

没有特别的理由在其他一切之前声明构造函数,它只是一个约定,或者是一个编码实践。这就像是按字母顺序声明公共功能,然后是公共成员,然后是私人功能,然后是私人成员和订单功能。

唯一有理由的排序标准是按字母顺序但按类型大小顺序声明成员,因为这是获得smaller class的简单方法。

就个人而言,我在构造函数和析构函数之前放置了枚举和typedef。

答案 1 :(得分:2)

公约。构造函数通常是您想要的第一件事 知道 - 你有一个对象,你做不了多少, 并且将析构函数(和赋值)放在一起似乎很自然 在他们旁边。但也有例外;很多人 将根据访问权限进行分组,因此如果构造函数是 保护,但析构函数公共(和赋值 运营商私人),他们不一定会被分组。

答案 2 :(得分:1)

完全没有,这只是编码风格的问题。

答案 3 :(得分:1)

没有任何理由,除了个人偏好。除纯粹美学原因外,方法的放置无关紧要。

答案 4 :(得分:1)

我通常在类中有单独的部分用于构造函数和析构函数,成员和方法,并通过public,private和protected分隔所有这些部分。将构造函数放在声明中是有意义的,因为构造函数通常是您在类中使用的第一个东西。当然,例如对于通常从不调用构造函数的单例,有一些例外。

答案 5 :(得分:0)

真正的好形式,它对解释器没有任何影响,而且表单可能是对早期语言的回归,可能需要在随后被调用之前声明的函数...

答案 6 :(得分:0)

回答

  

在构造函数之前声明变量是否有任何问题,如下面的代码所示?

嗯,它的“错误”在于你有一个公共变量。原则上这也是好的,但是大多数C ++程序员喜欢将所有变量设置为私有或全部公开(作为POD结构)。

假设你的意思

class A {
  int aVar;
 public:
  A() : aVar(20) {}
  ~A() {}
};

确实非常好,实际上FWIW我喜欢将所有数据成员放在首位:IMO是您在尝试理解类如何工作时首先需要知道的。
(许多程序员现在会说.h文件的主要目的不是教人们如何使用,只是它的界面是什么。我不同意:那是什么,例如Doxygen文档就在那里;如果你想了解内部实现,你只需要查看实际的源代码。)
另外,使用public关键字开始所有课程然后用private还原它是奇怪的IMO,但这不是一个论点。

当然,整个事情只是关于约定:如果项目中的所有类声明都有一定的布局,你应该坚持下去,其他一切都会让人感到困惑。