CPP文件中函数的顺序

8

在C++文件中,函数的顺序是否有标准?


以下是常见的函数顺序:

  • 全局函数
  • 构造函数
  • 析构函数
  • 获取函数
  • 设置函数
  • 算法函数
  • 如果是Qt程序,则为槽函数
  • 如果是派生类,则为重载函数
  • 静态函数
  • 其他未命名类型的函数...

在C++文件中,如何更好地排列这些函数呢?

我按照上面列表中的顺序进行排列。

虽然这不会改变任何东西,但我注重代码的美观程度...

你是如何排列的呢?

9个回答

11

我的个人顺序由类声明内的顺序给出:

class MyClass 
{
public:
    MyClass();
    ~MyClass();

     void start();

protected:
     static void init(MyClass *);

private:
     int  m_iCounter;   ///< counter variable for....
};

在 .cpp 文件中,它的样子看起来像这样:

MyClass::MyClass() :
   m_iCounter(0)
{
   ...
}

MyClass::~MyClass() {
   ...
}

void MyClass::start() {
   ...
}

void MyClass::init(MyClass *) {
    ...
}

顺序如下:

  1. 构造函数+析构函数
  2. (仅适用于Qt项目:)signals
  3. 公共方法-按重要性排序,例如首先是start()stop(),然后是getters和setters。
  4. 依重要性排列的受保护方法
  5. 受保护成员
  6. 私有方法
  7. 私有成员

希望有所帮助。

ciao, Chris


4
这可能看起来有些傻,但我尝试按照“正常使用”的顺序来排列我的公共方法,因此构造函数首先出现,然后是公共的doStuff方法,最后是关闭方法...这个“规则”的例外是析构函数,它在最后一个构造函数之后出现。
最后是任何私有的“辅助”方法。
我在所有语言中都使用相同的方法...(C++、Java、C#、Perl、sh或其他语言),然而还没有人因为这个把我枪毙了(至少目前没有)。
干杯。 Keith.

3
我通常使用的顺序是在Symbian平台上,顺序为:
  • 公共(public)、受保护(protected)和私有(private)方法
  • 公共、受保护和私有变量
这是由于在向后兼容已发布接口的规则指导下制定的。因为最有可能添加的是一个私有变量,所以将它们放在类的末尾,这样添加一个新的变量不会改变类中任何其他变量的位置。然后,在'public, protected'的顺序中放置更改接口的内容。对于类的方法,该排序被复制,尽管这些方法不会改变类实例中任何变量的内存位置。
至于虚函数的指南,就不要问了 ;)

3

现在它比以前不那么重要了。所有好的IDE都有(或应该有)通过右键单击或其他简单手势查找定义或引用的能力。浏览代码是浪费时间。

我通常按以下顺序排列: 构造函数 析构函数 我实现其余部分的任何顺序

然后,我回过头来将逻辑/相关功能分组在一起。

在头文件中对相关事物进行分组/排序以提高可读性可能比在cpp文件中更为重要。


2

在一个类内部,语言没有严格的规定。在类外部,当声明和定义分离时,需要确保声明在定义之前。

通常情况下,你会发现你所工作的团队会制定有关源文件格式的任何格式规则。然而,这只是美学方面的问题,它对程序的实际执行没有影响。


2

从最重要到最不重要:

  • 私有变量(不开玩笑,它们揭示了类的大部分内部工作)
  • 构造函数
  • 公共方法
  • 受保护的方法
  • 私有方法

方法本身应按其“抽象级别”排序:高级别:向上,低级别:向下,换句话说,结构化您的方法,使它们仅调用以下方法。


2

我们公司的标准是:

  1. 构造函数
  2. 析构函数
  3. 公有方法(按字母顺序排列)
  4. 私有方法(按字母顺序排列)

(注意:已保留HTML标签,请勿删除)

我不喜欢按字母顺序排列。如果你重构名称,那么它可能会改变位置。首先,这是另一件需要记住的事情。其次,在源代码控制中涉及更复杂的差异来确定发生了什么变化。 - Robert Deml
我们很少像你建议的那样重构名称,这真的很罕见。主要是因为我们必须维护大多数旧代码的COM兼容性(我们有一些产品已经运行了15年以上)。大部分C++代码正在逐渐消失,被C#和VB.NET所取代。据我了解,最后的组件将在明年初退役。.NET编码标准是不同的。 - Tangurena

1

我使用我的IDE进入我cpp文件中的函数,它按字母顺序进行排序,或者我进行搜索,并且搜索时实时响应,这非常快速。

所以对我来说,在.cpp文件中的函数顺序上没有任何工作流程的差异...


1
有时在 CPP 文件中使用未命名的命名空间(也称为匿名命名空间)来定义一些本地辅助函数是很方便的。如果这样做,我建议将这些函数放在文件顶部(CPP 文件内),以确保它们在任何调用它们的其他函数之前被定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接