代码组织——组织大型c++项目

code organization - Organizing large C++ project

本文关键字:项目 c++ 大型 代码      更新时间:2023-10-16

一个项目中所有的c++代码都应该被封装到一个单独的类中,main只是调用这个类吗?或者主函数应该声明变量和类吗?

如果你打算用c++构建一个大型项目,你至少应该阅读John Lakos的《large Scale c++ Software Design》。它有点老了,但听起来你可以从它的基本原理中受益。

请记住,用任何语言构建一个大规模的系统都是一个挑战,需要技巧和纪律来防止它很快崩溃。别掉以轻心。

也就是说,如果你对"大"的定义与我的不同,那么我可能有其他建议给你。我假设你正在谈论一个项目,在这个项目中,单词"million"将在包含单词"lines of code"的句子中被提到。

对于大型c++项目,您应该创建许多类!

main应该只是启动一些事情(可能做一些家务),然后调用一个类来启动系统的其余部分

如果这是一个真正有意义的类,当然——但至少对于IME来说,这是一个相当罕见的例外,而不是一般规则。

在这里,我假设你并不是真的意味着所有的代码都在一个类中,而是有一个单一的顶级类,所以基本上所有main所做的就是实例化并使用它。这个类,反过来,可能会实例化和使用其他从属类。

如果你真的想问"所有的代码都应该包含在一个类中吗?",那么答案几乎肯定是响亮的"不",除非是非常小的项目。如果所有代码都在一个类中,那么c++(以及大多数其他面向对象语言)中的大部分类设计都是完全没有意义的。

如果您可以将整个项目放在一个类中而不会发疯,那么您对"大型"的定义可能与这里的大多数人不同。这很好——只要记住,当你问别人关于一个"大型"c++项目时,他们会认为你在谈论一个需要好几个人年才能创建的东西。

也就是说,无论项目的大小,相同的封装原则都适用。将你的逻辑和数据分解成有意义的单元,而不是过于捆绑在一起,然后围绕这些单元组织你的课程。如果您发现自己在复制粘贴代码,或者发现一个类过于依赖另一个类,请不要害怕尝试一个组织,然后将其重构到另一个组织中。(或者如果你发现自己有太多的类,并且你要创建许多对象来完成一个任务,那么单个对象对你来说会更干净、更容易。)

玩得开心,不要害怕尝试。

在c++中,你应该避免将整个项目放在一个class中,无论大小。最多你可以试着把它放在1或2个namespace(它可以跨文件分割)。拥有多个类的好处是:

  1. 更好的可维护性
  2. 将类放在多个。h和。cpp文件中(即小模块)可以帮助您快速调试
  3. 如果所有代码都在一个类中,并且在某个地方进行了更改,那么必须编译整个项目。相反,如果项目是跨模块的,则只需编译所做更改的模块。它节省时间很多。

不!每个头文件/实现文件对应该代表一个类。将大型项目放在一个文件中肯定会导致灾难:项目变得不可维护,编译将花费很长时间。把你的代码分成适当大小的片段。

main函数不应该声明类,相反,它包含的文件(通常命名为main.cpp, driver.cpp, projectname.cpp)应该使用#include指令使编译器读取头文件中的声明。阅读c++的独立编译模型获取更多信息。

一些c++新手发现编译模型——以及当你搞砸它时产生的错误代码——难以理解或令人生畏,并放弃认为它不值得。不要让这种情况发生在你身上。学习如何正确组织代码