如何在C++中订购函数?

for*_*neo 5 c++ function

我不知道如何在C++中订购我的函数.在C中,我只是放置了一个函数,该函数使用该函数下面的另一个函数,尽可能接近 - 这很常见.像这样:

void bar()
{
}

void foo()
{
    bar();
}
Run Code Online (Sandbox Code Playgroud)

但是,在C++中,有几种类型的函数:

  • 免费功能
  • 私人会员功能
  • 公共成员职能
  • 静态成员函数

我目前正在使我的函数顺序依赖于它们在.hpp文件中的排序方式,例如:

class Foo_bar {
public:
    Foo_bar();
    void foo();
private:
    int some_member;
    void bar();
Run Code Online (Sandbox Code Playgroud)

但是现在,如果构造函数使用foo()或bar(),它们将位于源文件的构造函数下方,与我通常的顺序不一致.我当然可以重新排序我的标题以考虑到这一点:

class Foo_bar {
private:
    int some_member;
    void bar();

public:
    void foo();
    Foo_bar();
Run Code Online (Sandbox Code Playgroud)

但我认为那是一团糟.

此外,在Java中,与我的第一个示例相反似乎很常见:

void foo()
{
    bar();
}

void bar()
{
}
Run Code Online (Sandbox Code Playgroud)

这可能是由于OOP中常见的自上而下的思维,与程序/函数式编程中常见的自下而上的思维形成鲜明对比.但是,对于没有原型的自由函数,这种自上而下的风格是不可能的.

甚至可以以一致的方式在C++中命令函数吗?

dar*_*ioo 6

这是可能的.你必须使用前瞻声明.

在定义函数之前声明一个函数,即使之前定义了函数,其他函数也会看到它没有问题.

所以,你应该能够用C++做到这一点:

void bar();  // forward declaration; note that function bar isn't defined yet

void foo()
{
    bar();   // foo knows that bar is declared, so it will search for bar's definition
}

void bar()   // here bar is defined, so foo will use this when needed
{
}
Run Code Online (Sandbox Code Playgroud)

  • @forneo:如果你的意思是你没有将它放入头文件中,那很好,darioo没有说你应该.您可以使用原型在您使用它们的同一文件的顶部声明它.如果通过标题表示同一文件的标题(顶部),为什么不呢?即使它们不需要,我也会在我的文件顶部创建几乎所有内容的原型,并且它很好; 它不是很好,能够在顶部看到功能列表是件好事.如果你说你不会这样做,那就是你的损失,你说"我不想使用语言功能",你在这里毫无疑问. (2认同)