C++ 基础入门完全指南

C++ 作为一门兼具高效性和灵活性的编程语言,自诞生以来一直是系统开发、游戏引擎、嵌入式开发等领域的核心工具。它既保留了 C 语言的过程化编程特性,又引入了面向对象编程(OOP)、泛型编程等高级特性,是编程新手进阶的重要基石。本文将从环境搭建、基础语法、数据类型、流程控制、函数、数组、指针到面向对象基础等维度,结合大量可运行的代码示例,全面讲解 C++ 入门核心知识点,帮助你从零开始掌握 C++ 的基础框架。

一、C++ 开发环境搭建

在编写第一个 C++ 程序前,首先需要搭建合适的开发环境。C++ 作为编译型语言,需要编译器将源代码转换为可执行文件,同时搭配编辑器 / IDE 提升开发效率。

1.1 主流开发工具选择

  • Windows 平台
    • Dev-C++:轻量级、开箱即用,适合新手入门;
    • Code::Blocks:开源免费,支持多编译器;
    • Visual Studio 2022:微软官方 IDE,功能强大,内置 MSVC 编译器,推荐新手使用社区版(免费);
    • MinGW:GCC 编译器的 Windows 移植版,可搭配 VS Code 使用。
  • Linux 平台:自带 GCC 编译器,搭配 VS Code、Vim 或 CLion 即可。
  • macOS 平台 :安装 Xcode Command Line Tools(xcode-select --install)获取 Clang/GCC,搭配 Xcode 或 VS Code。

1.2 第一个 C++ 程序:Hello World

无论学习哪门语言,"Hello World" 都是入门的起点。以下是标准的 C++ Hello World 程序,我们以此为例讲解基础结构:

复制代码

bash

代码解读

复制代码

// 包含输入输出流头文件,cout/cin需要依赖此文件 #include <iostream> // 使用std命名空间,避免每次写std::cout using namespace std; // 主函数:程序的入口,int表示返回值类型 int main() { // 输出字符串到控制台,endl表示换行并刷新缓冲区 cout << "Hello, C++ World!" << endl; // 暂停程序(Windows平台),避免控制台一闪而过 // system("pause"); // 返回0表示程序正常结束 return 0; }

代码解释

  • #include <iostream>:预处理指令,引入标准输入输出流头文件,iostream是 input/output stream 的缩写,提供了控制台输入输出的功能;
  • using namespace stdstd是 C++ 标准库的命名空间,C++ 标准库的所有内容都封装在std中,此语句让我们可以直接使用cout而非std::cout
  • int main()main函数是程序的唯一入口,int表示函数执行后返回一个整数;
  • cout << "Hello, C++ World!" << endlcout是标准输出流对象,<<是流插入运算符,用于将内容输出到控制台;endl等价于\n(换行符),但会额外刷新输出缓冲区;
  • return 0:主函数返回 0 表示程序正常退出,非 0 值通常表示程序异常。

编译运行

  • 若使用 GCC 编译器,在终端执行:

    复制代码

    bash

    代码解读

    复制代码
    g++ hello.cpp -o hello # 编译源代码生成可执行文件 ./hello # 运行可执行文件(Linux/macOS) # 或 hello.exe # Windows平台

  • 若使用 IDE(如 Visual Studio),直接点击 "运行" 按钮即可。

二、C++ 基础语法

2.1 注释

注释是代码的说明文字,编译器会忽略注释内容。C++ 支持两种注释方式:

复制代码

bash

代码解读

复制代码

// 单行注释:以//开头,直到行尾 /* 多行注释:以/*开头,以*/结尾 可跨多行 注意:多行注释不能嵌套 */ #include <iostream> using namespace std; int main() { // 输出测试语句(单行注释) cout << "测试注释" << endl; /* 行内多行注释 */ return 0; }

2.2 标识符与关键字

2.2.1 标识符

标识符是变量、函数、类等自定义名称的统称,命名规则:

  • 由字母(A-Z/a-z)、数字(0-9)、下划线(_)组成;
  • 不能以数字开头;
  • 区分大小写(如ageAge是两个不同的标识符);
  • 不能与 C++ 关键字重名。

合法标识符示例name_scorestu_123MAX_NUM非法标识符示例123abc(以数字开头)、stu-name(含非法字符 -)、int(关键字)。

2.2.2 关键字

关键字是 C++ 语言预留的特殊单词,具有固定含义,不能作为标识符使用。常见关键字如下:

类别 关键字示例
数据类型 int、char、float、double、bool
控制语句 if、else、for、while、switch
存储类 static、const、extern
面向对象 class、public、private、virtual
其他 return、void、sizeof、typedef

2.3 变量与常量

2.3.1 变量

变量是程序中用于存储数据的内存单元,其值可以在程序运行过程中改变。定义变量的语法:

复制代码

bash

代码解读

复制代码

数据类型 变量名 = 初始值; // 推荐初始化 // 或 数据类型 变量名; // 不推荐,未初始化的变量值为随机值

示例

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { // 整型变量:存储整数 int age = 18; // 浮点型变量:存储小数 float height = 175.5f; // float需加f后缀,否则默认是double double weight = 65.8; // double精度更高 // 字符型变量:存储单个字符,用单引号包裹 char gender = 'M'; // 布尔型变量:存储真(true/1)或假(false/0) bool isStudent = true; // 输出变量值 cout << "年龄:" << age << endl; cout << "身高:" << height << "cm" << endl; cout << "体重:" << weight << "kg" << endl; cout << "性别:" << gender << endl; cout << "是否学生:" << boolalpha << isStudent << endl; // boolalpha:将布尔值以true/false输出,而非1/0 // 修改变量值 age = 19; cout << "修改后的年龄:" << age << endl; return 0; }

输出结果

复制代码

bash

代码解读

复制代码

年龄:18 身高:175.5cm 体重:65.8kg 性别:M 是否学生:true 修改后的年龄:19

2.3.2 常量

常量是程序运行过程中值不可改变的量,C++ 定义常量有两种方式:

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; // 1. 宏常量:预处理阶段替换,无类型检查 #define PI 3.1415926 #define MAX_SCORE 100 int main() { // 2. const常量:编译阶段检查,有类型限制(推荐) const int MIN_AGE = 0; // 使用常量 double radius = 5.0; double area = PI * radius * radius; cout << "圆的面积:" << area << endl; // 常量不可修改,以下代码会报错 // PI = 3.14; // 宏常量修改报错 // MIN_AGE = 1; // const常量修改报错 return 0; }

输出结果

复制代码

bash

代码解读

复制代码

圆的面积:78.5398

对比#define是预处理指令,仅做文本替换,无类型安全检查;const是编译期常量,有类型限制,占用内存,更安全,推荐优先使用。

2.4 数据类型

C++ 的数据类型分为基本数据类型复合数据类型,基础阶段重点掌握基本数据类型:

类型 关键字 大小(字节) 取值范围 用途
布尔型 bool 1 true/false(等价于 1/0) 表示真假
字符型 char 1 -128 ~ 127(或 0 ~ 255,取决于编译器) 存储单个字符
短整型 short 2 -32768 ~ 32767 小范围整数
整型 int 4 -2^31 ~ 2^31-1 常用整数
长整型 long 4/8 取决于系统(至少 4 字节) 较大范围整数
长长整型 long long 8 -2^63 ~ 2^63-1 超大范围整数
浮点型 float 4 6~7 位有效数字 单精度小数
双精度浮点型 double 8 15~16 位有效数字 常用小数(默认)

示例:数据类型大小与取值

复制代码

bash

代码解读

复制代码

#include <iostream> #include <climits> // 包含整型取值范围常量 #include <cfloat> // 包含浮点型取值范围常量 using namespace std; int main() { // 输出各数据类型的大小(字节) cout << "bool大小:" << sizeof(bool) << "字节" << endl; cout << "char大小:" << sizeof(char) << "字节" << endl; cout << "short大小:" << sizeof(short) << "字节" << endl; cout << "int大小:" << sizeof(int) << "字节" << endl; cout << "long大小:" << sizeof(long) << "字节" << endl; cout << "long long大小:" << sizeof(long long) << "字节" << endl; cout << "float大小:" << sizeof(float) << "字节" << endl; cout << "double大小:" << sizeof(double) << "字节" << endl; // 输出整型取值范围 cout << "int最小值:" << INT_MIN << endl; cout << "int最大值:" << INT_MAX << endl; cout << "long long最小值:" << LLONG_MIN << endl; cout << "long long最大值:" << LLONG_MAX << endl; // 输出浮点型精度 cout << "float有效数字:" << FLT_DIG << "位" << endl; cout << "double有效数字:" << DBL_DIG << "位" << endl; return 0; }

输出结果(64 位系统)

复制代码

bash

代码解读

复制代码

bool大小:1字节 char大小:1字节 short大小:2字节 int大小:4字节 long大小:8字节 long long大小:8字节 float大小:4字节 double大小:8字节 int最小值:-2147483648 int最大值:2147483647 long long最小值:-9223372036854775808 long long最大值:9223372036854775807 float有效数字:6位 double有效数字:15位

2.5 运算符

运算符是用于执行运算的符号,C++ 运算符分为算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符等,以下是常用运算符的示例:

2.5.1 算术运算符
运算符 功能 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a /b(整数除法取整)
% 取模(余数) a % b(仅整数可用)
++ 自增 a++(后置)、++a(前置)
-- 自减 a--(后置)、--a(前置)
复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { int a = 10, b = 3; // 基本算术运算 cout << "a + b = " << a + b << endl; // 13 cout << "a - b = " << a - b << endl; // 7 cout << "a * b = " << a * b << endl; // 30 cout << "a / b = " << a / b << endl; // 3(整数除法) cout << "a % b = " << a % b << endl; // 1(余数) // 自增自减 int c = 5; cout << "c++ = " << c++ << endl; // 5(先输出,后自增) cout << "c = " << c << endl; // 6 cout << "++c = " << ++c << endl; // 7(先自增,后输出) int d = 8; cout << "d-- = " << d-- << endl; // 8(先输出,后自减) cout << "d = " << d << endl; // 7 cout << "--d = " << --d << endl; // 6(先自减,后输出) return 0; }

2.5.2 赋值运算符
运算符 功能 示例 等价于
= 基本赋值 a = 5 -
+= 加后赋值 a += 5 a = a + 5
-= 减后赋值 a -= 5 a = a - 5
*= 乘后赋值 a *= 5 a = a * 5
/= 除后赋值 a /= 5 a = a / 5
%= 模后赋值 a %= 5 a = a % 5
复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { int x = 10; x += 5; // x = 15 cout << "x += 5: " << x << endl; x -= 3; // x = 12 cout << "x -= 3: " << x << endl; x *= 2; // x = 24 cout << "x *= 2: " << x << endl; x /= 4; // x = 6 cout << "x /= 4: " << x << endl; x %= 4; // x = 2 cout << "x %= 4: " << x << endl; return 0; }

2.5.3 比较运算符

比较运算符返回布尔值(true/false),常用于条件判断:

运算符 功能 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b
复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { int m = 8, n = 8; cout << boolalpha; // 输出true/false而非1/0 cout << "m == n: " << (m == n) << endl; // true cout << "m != n: " << (m != n) << endl; // false cout << "m > n: " << (m > n) << endl; // false cout << "m < n: " << (m < n) << endl; // false cout << "m >= n: " << (m >= n) << endl; // true cout << "m <= n: " << (m <= n) << endl; // true return 0; }

2.5.4 逻辑运算符

逻辑运算符用于组合多个条件,返回布尔值:

运算符 功能 示例 规则
&& 逻辑与 a && b 全为 true 则 true,否则 false
逻辑或 a b 有一个 true 则 true,否则 false
! 逻辑非 !a 取反,true 变 false,false 变 true
复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { bool cond1 = true, cond2 = false; cout << boolalpha; cout << "cond1 && cond2: " << (cond1 && cond2) << endl; // false cout << "cond1 || cond2: " << (cond1 || cond2) << endl; // true cout << "!cond1: " << !cond1 << endl; // false cout << "!cond2: " << !cond2 << endl; // true // 实际应用:判断年龄是否在18-60之间 int age = 25; bool isAdult = (age >= 18) && (age <= 60); cout << "是否为成年且未退休:" << isAdult << endl; // true return 0; }

三、流程控制语句

流程控制用于改变程序的执行顺序,C++ 提供三种基本流程结构:顺序结构(默认)、选择结构(if/switch)、循环结构(for/while/do-while)。

3.1 选择结构

3.1.1 if 语句

if语句根据条件执行不同的代码块,分为单分支、双分支、多分支:

单分支 if

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { // 单分支:条件为true时执行 int score = 90; if (score >= 60) { cout << "成绩合格" << endl; } return 0; }

双分支 if-else

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { // 双分支:条件为true执行if块,否则执行else块 int score = 55; if (score >= 60) { cout << "成绩合格" << endl; } else { cout << "成绩不合格" << endl; } return 0; }

多分支 if-else if-else

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { // 多分支:依次判断条件,匹配则执行对应块 int score = 85; if (score >= 90) { cout << "优秀" << endl; } else if (score >= 80) { cout << "良好" << endl; } else if (score >= 70) { cout << "中等" << endl; } else if (score >= 60) { cout << "及格" << endl; } else { cout << "不及格" << endl; } return 0; }

3.1.2 switch 语句

switch语句适用于多分支的等值判断,比多分支 if 更简洁:

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { // switch:根据表达式的值匹配case int grade = 3; switch (grade) { case 1: cout << "一年级" << endl; break; // 跳出switch,避免穿透 case 2: cout << "二年级" << endl; break; case 3: cout << "三年级" << endl; break; default: // 所有case不匹配时执行 cout << "未知年级" << endl; } return 0; }

注意

  • switch的表达式只能是整型、字符型或枚举类型;
  • case后必须是常量表达式,不能是变量;
  • break用于终止当前 case,否则会发生 "case 穿透"(执行后续 case);
  • default可选,通常放在最后,处理未匹配的情况。

3.2 循环结构

循环结构用于重复执行一段代码,直到满足终止条件。

3.2.1 for 循环

for循环适用于已知循环次数的场景,语法:

复制代码

bash

代码解读

复制代码

for (初始化表达式; 条件表达式; 更新表达式) { 循环体; }

示例 1:遍历 1-10 的整数并求和

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { int sum = 0; // 初始化i=1;条件i<=10为true时执行循环体;每次循环后i++ for (int i = 1; i <= 10; i++) { sum += i; // 累加 cout << "当前i:" << i << ",累计和:" << sum << endl; } cout << "1-10的和:" << sum << endl; // 55 return 0; }

示例 2:输出 100 以内的偶数

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { cout << "100以内的偶数:" << endl; for (int i = 0; i <= 100; i += 2) { cout << i << " "; // 每输出10个换行 if (i % 20 == 0 && i != 0) { cout << endl; } } return 0; }

3.2.2 while 循环

while循环适用于未知循环次数的场景,语法:

复制代码

bash

代码解读

复制代码

while (条件表达式) { 循环体; }

示例:计算 1-100 的累加和(while 版)

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { int sum = 0; int i = 1; // 条件i<=100为true时执行循环体 while (i <= 100) { sum += i; i++; // 必须手动更新循环变量,否则死循环 } cout << "1-100的和:" << sum << endl; // 5050 return 0; }

3.2.3 do-while 循环

do-while循环先执行一次循环体,再判断条件,语法:

复制代码

bash

代码解读

复制代码

do { 循环体; } while (条件表达式);

示例:输入密码直到正确

复制代码

bash

代码解读

复制代码

#include <iostream> #include <string> // 字符串头文件 using namespace std; int main() { string password; const string correct_pwd = "123456"; // 至少执行一次输入 do { cout << "请输入密码:"; cin >> password; if (password != correct_pwd) { cout << "密码错误,请重新输入!" << endl; } } while (password != correct_pwd); cout << "密码正确,登录成功!" << endl; return 0; }

3.2.4 循环控制关键字
  • break:跳出当前循环(或 switch),终止循环;
  • continue:跳过当前循环的剩余语句,直接进入下一次循环;
  • goto:跳转到指定标签(不推荐使用,易导致代码混乱)。

示例:break 和 continue 的使用

复制代码

bash

代码解读

复制代码

#include <iostream> using namespace std; int main() { // break示例:找到第一个大于5的数就退出循环 cout << "break示例:" << endl; for (int i = 1; i <= 10; i++) { if (i > 5) { break; } cout << i << " "; // 输出:1 2 3 4 5 } cout << endl; // continue示例:跳过偶数,只输出奇数 cout << "continue示例:" << endl; for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { continue; // 跳过偶数 } cout << i << " "; // 输出:1 3 5 7 9 } cout << endl; return 0; }