介绍C++开发

介绍C++开发

在我们编写和执行第一个C++程序之前,我们需要更详细地了解一个C++程序是怎么被开发出来的。看下图:

软件开发过程

第1步:定义您要解决的问题。

这是“做什么”的阶段,在这个阶段你需要找出你要解决的问题。定义你想要编写什么样的程序或许是最简单的一步,但也可能是最难的一步。但从概念上讲,它是最简单的。您只需要有一个深思熟虑的想法,你就可以进行下一步了。

这里有一些例子:

“我想编写一个程序,允许我输入许多数字,然后计算平均值。”
“我想写一个生成2d迷宫的程序,让用户浏览它。如果用户到达目的地,用户将获胜。“
“我想写一个程序,读取股票价格文件并预测股票是涨还是跌。”

第2步:确定如何解决问题。

这是“怎么做”的阶段,你要在这个阶段决定用什么样的方式来解决第一阶段所提出的问题。这也是软件开发中最容易忽略的步骤。问题的关键在于有很多方法可以解决问题 – 但是,其中一些方法很好,其中一些方法却很烂。通常,程序员会一下子就想出一个解决方案,然后屁股一坐,就开始写代码。这种情况下通常会产出比较烂的解决方案。

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

  • 它们很简单(不会过于复杂或令人困惑)。
  • 它们有很好说明(特别是在提出任何假设或限制时)。
  • 它们是模块化构建的,因此可以在以后重复使用或更改,且不会影响程序的其他部分。
  • 它们非常稳健,可以在出现意外情况时容易修复或提供有用的错误消息。

当你脑袋一热,屁股一坐,然后立即开始写代码时,你通常思考的是“我想做这个”,因此你使用最快的实现方式来达成你想要的效果,然而这可能导致程序的健壮性非常脆弱,以后难以更改或扩展,或者存在大量Bug(技术缺陷)。

作为旁白...

术语Bug最早是由托马斯·爱迪生早在19世纪70年代提出!然而,该术语在20世纪40年代普及,当时工程师发现一只飞蛾卡在早期计算机的硬件中,导致短路。当时的错误报告和“飞蛾”实体现在都还在美国Smithsonian历史博物馆存放着。

研究表明,程序员只有20%的时间用于编写初始程序。另外80%用于维护,包括调试(删除错误),针对新需求进行更改(例如,在新的操作系统版本上运行),增强功能(用于改进可用性或功能的微小更改),或者内部改进(提高可靠性或可维护性)。

因此,你有必要在开始写代码前,花更多的时间去思考解决问题的最佳方法,提出更多的假设,以及未日后的维护做好计划,这样可以一路上节约你很多的时间,记住,思考两次,编码一次!

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

第3步:编写程序

为了编写程序,我们需要两件事:首先我们需要编程语言的知识 – 这就是这些教程的用途!其次,我们需要一个代码编辑器。可以使用您想要的任何代码编辑器编写程序,甚至用windows系统的记事本或者Unix的vi都行。但是,我们强烈建议您使用专为写代码而设计的编辑器。如果你还没有,请不要担心。我们将简要介绍如何安装代码编辑器。

专为写代码而设计的编辑器具有一些使编程更容易的功能,包括:

1)行号。当编译器给我们一个错误时,行号很有用,因为一般的编译器报错会像这样:错误代码/错误消息,第64行。如果没有显示行号的编辑器,你要找第64行可能只有一行一行慢慢数了。

2)语法高亮和着色。语法高亮和着色会更改程序各个部分的颜色,以便更容易识别程序的不同组件。这是一个包含行号和语法高亮的C++程序示例(来自译者:我还不知道怎么通过markdown显示行号…):

1
2
3
4
5
6
7
#include <iostream>

int main()
{
std::cout << "Colored text!";
return 0;
}

我们在本教程中展示的示例将始终具有行编号和语法突出显示,好让它更容易看懂。

3)明确的字体。非编程字体通常使得难以区分数字0和字母O,或数字1,字母l(小写字母L)和字母I(大写字母i)。一个好的编程字体将区分这些符号,以确保不会意外地使用一个符号代替另一个符号。

在C++中,您的程序通常称为name.cpp,其中name替换为您为程序选择的名称(例如计算器,hello等等)。.cpp扩展则告诉您这是一个包含C++指令的C++源代码文件。请注意,有些人使用扩展名.cc而不是.cpp,但我们建议您使用.cpp。

最佳实践

将您的代码文件命名为name.cpp,其中name是您选择的名称,.cpp是指示该文件是C++源文件的扩展名。

另请注意,许多复杂的C++程序都有多个.cpp文件。在学习初期您一般用到一个.cpp文件就够了,但你需要知道的是,一个程序很有可能会有成百上千的.cpp文件(来自译者:比如虚幻引擎源代码,WTF!)

一旦我们编写了程序,接下来的步骤就是将它转换成我们可以运行的东西,然后看它是否有效!我们将在下一节中讨论这些(4到7)步骤。