CPP 入门教程 Part 2

C++ 程序结构

我们分析一下上一章的 Hello World 程序。

1
2
3
4
5
6
#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

#include <iostream>: 这是一个预处理指令,用于包含标准输入输出流库<iostream>,允许我们使用std::cout来输出数据。

int main() { ... }: 这是主函数main,程序从这里开始执行。

std::cout << "Hello, World!" << std::endl;: 这行代码使用标准输出流std::cout来打印字符串”Hello, World!”,std::endl用于在输出后换行。

return 0;: 表示程序成功结束,并返回值 0 给操作系统。

编译 & 执行 C++ 程序

C++ 程序代码编写完成后,需要编译才能执行。

编译

使用一个 C++ 编译器(如 g++)来将源代码转换为可执行程序。
在命令行输入以下命令以编译上一章的 Hello World 程序:

1
g++ -o hello hello.cpp
  • g++: 调用 GNU C++ 编译器。
  • -o hello: 指定输出文件名为 hello-og++ 命令的参数,用于指定输出的文件名。
  • hello.cpp: 源代码文件名。

执行

编译成功后,生成的可执行文件可以通过在终端输入以下命令运行:

1
./hello

这将会在终端上打印出 “Hello, World!”。

C++ 基本语法

面向对象编程 (OOP)

C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。

  • 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。

  • 类 - 类可以定义为描述对象行为/状态的模板/蓝图。

  • 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。

  • 成员变量 - 每个对象都有其自己成员变量。对象的状态是由这些成员变量的值构成的。

语句结束符

在 C++ 中,每个语句通常以分号 (;) 结束。这是必须的,因为分号告诉编译器该语句的结束。缺少分号会导致编译错误。

例如:

1
2
3
int a = 5;
int b = 10;
int sum = a + b;

每个变量定义和赋值语句都以分号结尾。

早期的编译器设计较为简单,需要明确的标识符来区分语句,而分号就是这样一个清晰的标识符。随着编译器技术的发展,虽然可以设计更智能的解析方式,但 C++继承自 C 语言, 保留分号可以保持向后兼容性。

代码块

代码块是用花括号 {} 括起来的一系列语句。代码块用于将多个语句组合为一个单元,通常用于函数、条件和循环中。

示例:

1
2
3
4
5
if (a < b) {
std::cout << "a is less than b." << std::endl;
} else {
std::cout << "a is not less than b." << std::endl;
}

在上面的代码中,ifelse 都包含各自的代码块。

函数定义也是代码块的一个例子:

1
2
3
int add(int x, int y) {
return x + y;
}

这里,add 函数的主体是一个代码块,由花括号括起来。

通过使用分号和代码块,C++ 能够明确地分隔逻辑单元,从而支持复杂的逻辑。

标识符

标识符是用于标识变量、函数、类等实体的名称。它可以由字母(大写或小写)、数字和下划线组成,但不能以数字开头。例如:

1
2
3
int myVariable;
float _value;
char letter1;
  • 合法标识符示例:myVariable, value123, _temp
  • 非法标识符示例:1stValue(不能以数字开头)

在 C++ 中,标识符区分大小写,因此 MyVariablemyvariable 是两个不同的标识符。

选择标识符时应使用有意义的名称,以便代码易于阅读和维护。

关键字

下表列出了 C++ 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

关键字
asmelsenewthis
autoenumoperatorthrow
boolexplicitprivatetrue
breakexportprotectedtry
caseexternpublictypedef
catchfalseregistertypeid
charfloatreinterpret_casttypename
classforreturnunion
constfriendshortunsigned
const_castgotosignedusing
continueifsizeofvirtual
defaultinlinestaticvoid
deleteintstatic_castvolatile
dolongstructwchar_t
doublemutableswitchwhile
dynamic_castnamespacetemplate

空格

只包含空格的行,被称为空白行,可能带有注释,C++ 编译器会完全忽略它。

在 C++ 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:

1
int age;

在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:

1
fruit = apples + oranges;   // 获取水果的总数

fruit=,或者=apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。

注释

程序的注释是解释性语句,您可以在 C++ 代码中包含注释,这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。

C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。

C++ 注释以 /* 开始,以 */ 终止。例如:

1
2
3
4
/* 这是注释 */
/*
* C++ 注释也可以跨行
*/

注释也能以 // 开始,直到行末为止。例如:

1
2
3
4
5
#include <iostream>
int main() {
cout << "Hello World"; // 输出 Hello World
return 0;
}

当上面的代码被编译时,编译器会忽略 // 输出 Hello World,最后会产生以下结果:

1
Hello World

/**/ 注释内部,// 字符没有特殊的含义。在 // 注释内,/**/ 字符也没有特殊的含义。因此,您可以在一种注释内嵌套另一种注释。例如:

1
2
3
/* 用于输出 Hello World 的注释
cout << "Hello World"; // 输出 Hello World
*/

参考

发布于

2024-10-29

更新于

2025-07-07

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×