Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么构造函数和析构函数通常在类中首先声明?_C++_Constructor_Header_Declaration - Fatal编程技术网

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

C++ 为什么构造函数和析构函数通常在类中首先声明?,c++,constructor,header,declaration,C++,Constructor,Header,Declaration,我总是看到构造函数和析构函数是在类中声明的。这只是一个很好的编码标准,每个人都使用它来更容易地找到它们,还是背后有原因。例如,在构造函数之前声明变量(如下面的代码中所示)是否有任何错误 class A { public: int aVar; A() :aVar(20) {} ~A() {} }; 一点也不,这只是一个编码风格的问题。一点也不,这只是一个编码风格的问题。只是好的形式真的,它对解释器没有什么区别,而且形式可能是早期语言

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

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

一点也不,这只是一个编码风格的问题。

一点也不,这只是一个编码风格的问题。

只是好的形式真的,它对解释器没有什么区别,而且形式可能是早期语言的翻版,可能需要先声明一个函数,然后再调用它…

只是好的形式真的,它对解释器没有任何影响,并且表单可能是对早期语言的一种回溯,早期语言可能需要在随后调用函数之前声明函数…

没有特别的理由在所有其他事情之前声明构造函数,它只是一种约定或一种编码实践。这就像声明公共函数,然后声明公共成员,然后声明私有函数,然后声明私有成员,然后按字母顺序排列函数

唯一有理由的排序标准是不是按字母顺序而是按类型大小顺序声明成员,因为这是一种简单的方法来创建一个成员


就我个人而言,我把enum和typedef放在构造函数和析构函数之前。

没有特别的理由将构造函数放在其他所有东西之前,这只是一种约定,或者一种编码实践。这就像声明公共函数,然后声明公共成员,然后声明私有函数,然后声明私有成员,然后按字母顺序排列函数

唯一有理由的排序标准是不是按字母顺序而是按类型大小顺序声明成员,因为这是一种简单的方法来创建一个成员


就个人而言,我将enum和typedef放在构造函数和析构函数之前。

除了个人偏好之外,没有任何理由。除了纯粹的审美原因外,方法的放置是不相关的。

除了个人偏好之外,没有任何原因。除了纯粹的美学原因外,方法放置是不相关的。

我通常在类中为构造函数和析构函数、成员和方法设置单独的部分,并通过公共、私有和受保护的方式将它们分开。在声明中首先使用构造函数是有意义的,因为构造函数通常是您在类之外使用的第一个东西。当然也有一些例外,例如,对于singleton,您通常从不调用构造函数。

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

约定。构造函数通常是您想要的第一件事 要想知道你不能做很多事直到你有了目标, 而且似乎很自然地将析构函数(和赋值) 在他们旁边。但也有例外;很多人 将根据访问权限分组,因此如果构造函数 受保护,但析构函数为public(和赋值
操作员专用),它们不必分组。

常规。构造函数通常是您想要的第一件事 要想知道你不能做很多事直到你有了目标, 而且似乎很自然地将析构函数(和赋值) 在他们旁边。但也有例外;很多人 将根据访问权限分组,因此如果构造函数 受保护,但析构函数为public(和赋值 操作员专用),他们不必分组。

回答

在构造函数之前声明变量(如下面的代码所示)是否有任何错误

class A
{
     public:
         int aVar;
         A() :aVar(20) {}
         ~A() {}
};
好吧,它的“错误”在于你有一个公共变量。原则上也可以,但是大多数C++程序员更喜欢把所有变量私有或所有公开(作为POD结构)。 假设你是说

class A {
  int aVar;
 public:
  A() : aVar(20) {}
  ~A() {}
};
这确实很好,事实上,我喜欢把所有的数据成员放在最上面:在我看来,当你试图理解一个类是如何工作的时候,这是你需要知道的第一件事。
(许多程序员现在会说,
.h
文件的主要目的不是教人们类如何工作,而是教他们接口是什么。我不同意:这就是Doxygen文档的用途;如果你想了解内部实现,你只需要查看实际的源代码。)
此外,在我看来,用
public
关键字开始所有类,然后用
private
将其还原是很奇怪的,但这几乎不是一个参数

当然,整件事实际上只是关于惯例:如果一个项目中的所有类declarion都有特定的布局,那么您应该坚持这样做,其他一切都会让人困惑。

回答这个问题

在构造函数之前声明变量(如下面的代码所示)是否有任何错误

class A
{
     public:
         int aVar;
         A() :aVar(20) {}
         ~A() {}
};
好吧,它的“错误”在于你有一个公共变量。原则上也可以,但是大多数C++程序员更喜欢把所有变量私有或所有公开(作为POD结构)。 假设你是说

class A {
  int aVar;
 public:
  A() : aVar(20) {}
  ~A() {}
};
这确实很好,事实上,我喜欢把所有的数据成员放在最上面:在我看来,当你试图理解一个类是如何工作的时候,这是你需要知道的第一件事。
(许多程序员现在会说,
.h
文件的主要目的不是教人们如何使用这个类,而是教他们如何使用它的接口。我不同意:这就是Doxygen文档的目的;如果你想了解它,你只需要查看实际的源代码