C++开发入门:从问题定义到代码实现的完整流程

在我们能够编写并执行我们的第一个C++程序之前,我们需要更详细地了解C++程序是如何开发的。这里有一个图表概述了一个简单的方法:

C++开发流程

软件开发的基本步骤

步骤1:定义你想要解决的问题

这是"什么"步骤,在这里你弄清楚你打算解决的问题是什么。想出你想要编程的初始想法可能是最简单的步骤,也可能是最难的。但从概念上讲,它是最简单的。你只需要一个可以被很好地定义的想法,然后你就可以进入下一步了。

这里有一些例子:

  • “我想编写一个程序,允许我输入许多数字,然后计算平均值。”
  • “我想编写一个程序,生成一个二维迷宫,并让用户导航通过它。如果用户到达终点,他们就赢了。”
  • “我想编写一个程序,读取一个包含股票价格的文件,并预测股票是上涨还是下跌。”

步骤2:确定你将如何解决这个问题

这是"如何"步骤,在这里你确定你将如何解决你在步骤1中想出的问题。这也是软件开发中最容易被忽视的步骤。问题的核心是,有很多方法可以解决问题——然而,这些解决方案中有些是好的,有些是坏的。程序员经常得到一个想法,坐下来,立即开始编码一个解决方案。这通常会生成一个属于坏类别的解决方案。

好的解决方案的特点

通常,好的解决方案具有以下特点:

  • 它们是直接的(不过于复杂或令人困惑)。
  • 它们有良好的文档记录(特别是在任何假设或限制方面)。
  • 它们是模块化构建的,所以部分可以被重用或稍后更改,而不会影响程序的其他部分。
  • 当发生意外情况时,它们可以优雅地恢复或给出有用的错误信息。

当你坐下来立即开始编码时,你通常在想"我想要做<某事>",所以你实现了让你最快到达那里的解决方案。这可能导致程序脆弱,难以更改或扩展,或者有很多错误。错误是任何阻止程序正确运行的编程错误。

关于"bug"的历史

顺便说一句… “bug"这个词最早由托马斯·爱迪生在19世纪70年代使用!然而,这个词在1940年代被普及,当时工程师们发现一只真正的飞蛾卡在早期计算机的硬件中,导致短路。报告错误的日志本和飞蛾现在都是美国历史博物馆的一部分。你可以在这里查看。

软件维护的重要性

各种研究表明,在复杂的软件系统中,程序员的时间只有10-40%实际上是用来编写初始程序的。其他60-90%的时间用于维护,可能包括调试(去除错误)、更新以应对环境变化(例如,在新的操作系统版本上运行)、增强(为了提高可用性或能力而进行的微小更改)或内部改进(为了增加可靠性或可维护性)1。

因此,值得你花一些额外的时间(在你开始编码之前)思考解决一个问题的最佳方式,你正在做出的假设,以及你如何计划未来,以节省你将来的大量时间和麻烦。

我们将在以后的课程中更多地讨论如何有效地设计问题的解决方案。

步骤3:编写程序

为了编写程序,我们需要两件事:首先,我们需要了解一种编程语言——这就是这些教程的目的!其次,我们需要一个文本编辑器来编写和保存我们的C++程序。我们输入到文本编辑器的C++指令集被称为程序的源代码(通常简称为代码)。你可以使用任何你想要的文本编辑器编写程序,即使是像Windows的记事本或Unix的vi或pico这样简单的东西。

基本文本编辑器中的程序示例

在基本文本编辑器中输入的程序看起来可能像这样:

#include <iostream>

int main()
{
    std::cout << "Here is some text.";
    return 0;
}

然而,我们强烈建议你使用为编程设计的编辑器(称为代码编辑器)。如果你还没有,不用担心。我们很快就会介绍如何安装代码编辑器。

代码编辑器的优势

为编码设计的典型编辑器具有一些使编程变得更容易的功能,包括:

行号功能

行号。行号在编译器给我们错误时很有用,因为典型的编译器错误会指出:某个错误代码/消息,第64行。没有显示行号的编辑器,找到第64行可能是个真正的麻烦。

语法高亮和着色

语法高亮和着色改变程序中各个部分的颜色,使其更容易识别程序的不同组件。

等宽字体的重要性

一个明确的、固定宽度的字体(通常称为"等宽字体”)。非编程字体通常使人难以区分数字0和字母O,或者数字1、字母l(小写L)和字母I(大写i)。一个好的编程字体将确保这些符号在视觉上有所区分,以确保一个不会被意外地替换为另一个。所有代码编辑器应该默认启用这一点,但标准文本编辑器可能没有。使用固定宽度字体(所有符号具有相同的宽度)可以更容易地正确格式化和对齐你的代码。

带有语法高亮的程序示例

这是一个带有行号、语法高亮和固定宽度字体的C++程序示例:

#include <iostream>

int main()
{
    std::cout << "Here is some text.";
    return 0;
}

注意,这比未高亮的版本更容易理解。本教程中显示的源代码将同时具有行号和语法高亮,以使代码更容易跟随。

编程字体的选择

提示 编码字体和编程字体都有一些很棒的工具,可以让你比较不同的编码字体,看看哪些是你最喜爱的。

连字在编程字体中的应用

高级读者 由于源代码是使用ASCII字符编写的,编程语言使用一定数量的ASCII艺术来表示数学概念。例如,≠不是ASCII字符集的一部分,所以编程语言通常使用!=来表示数学不等式。

一些编程字体,如Fira Code,使用连字将这样的"艺术"重新组合成一个字符。例如,Fira Code将显示≠(使用与两个字符版本相同的宽度),而不是显示!=。有些人发现这更容易阅读,其他人则更喜欢坚持使用更字面解释的基本字符。

源代码文件管理

许多简单的C++程序只有一个源代码文件,但复杂的C++程序可能有数百甚至数千个源代码文件。

你的程序中的每个源代码文件都需要保存到磁盘上,这意味着每个源代码文件都需要一个文件名。C++对文件命名没有任何要求。然而,事实上的标准是将为程序创建的第一个/主要源文件命名为main.cpp。文件名(main)使其容易确定哪个是主要的源代码文件,而.cpp扩展名表示该文件是一个C++源代码文件。

你偶尔会看到第一个/主要源代码文件以程序的名称命名(例如calculator.cpp,poker.cpp)。你也可能偶尔会看到其他扩展名的使用(例如.cc或.cxx)。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"