C++ - 需要有关如何正确设计 multi-file 程序的建议

C++ - need advice on how to properly design a multi-file program

好的,基本上我需要使用 Allegro 5 和 C++ 创建一个简单的游戏。我想把它分成单独的模块,这样更容易管理。我的问题是:在不同文件之间管理 "moving" 的正确方法是什么?具体来说,我想要一个名为 Menu.cpp 的文件,它将是主文件,然后根据用户的选择,它会执行其他文件中指定的操作,例如 Singleplayer.cpp 或 [=23] =](这甚至是一个好方法吗?)。我的想法是这样做:

//Menu.cpp
#include "Singleplayer.h"

int main()
{
int parameter;
if(user_selects_singleplayer) singleplayer(parameter);
return 0;
}


//Singleplayer.cpp
void singleplayer(int parameter)
{
...
handle_singleplayer
...
}

//Singleplayer.h
#ifndef SINGLEPLAYER_H
#define SINGLEPLAYER_H //or maybe #pragma once  ?

void singleplayer(int parameter);

#endif

我想知道这是否是一个正确的方法,如果是这样,我是否应该在 Singleplayer.cpp 中有一个 main() 函数(以及如何更改文件以使其工作) 如果我需要在 Singleplayer.cpp 中包含 Singleplayer.h .

在我的示例中,我省略了一些内容,例如包括 allegro 库、初始化更多变量等,以使总体思路更加清晰。另外我想指出,我不能使用 classes 和流(我知道这很愚蠢,但这是一项要求,因为这个项目是编程 class 的家庭作业)。

编辑:@Leiaz 链接的问题是相关的,它的答案肯定有助于理解 headers 的工作原理,但我的问题更多是关于正确的设计方法。不管怎样,谢谢你的回答,我一定会仔细阅读这个主题的。

以下是一些适用于大多数情况的规则:

  • 每个 cpp 文件都有一个 h-file 包含在 cpp

    main.cpp 包括 main.h , Singleplayer.cpp 包括 Singleplayer.h

  • class定义和函数原型在header文件中,实现在cpp文件中

    小时:int add(int x, int y); cpp: int add(int x, int y){ return x+y; }

  • 只包含 header 个文件,从不包含 cpp 文件

    避免多重定义问题,因为 headers 有代码保护(你的定义)而 cpp 没有

  • 只包含您实际需要的文件以减少编译时间

    不要制作包含每个 header 的 all.h

  • 如果可能,将 h 文件包含在 cpp 文件中。仅在需要时将其包含在 header 中。

    减少编译时间并避免循环引用

您应该研究一下如何正确设计 c++ 项目以了解其背后的原理。