一、开发环境
- 编译器GCC(Linux/macOS)、Clang(macOS)、MSVC(Windows,Visual Studio 内置)
- IDE(推荐)
- 新手入门:Dev-C++(轻量)、Code::Blocks(跨平台)
- 进阶 / 项目开发:Visual Studio(Windows)、CLion(跨平台,需配置编译器)
二、核心语法:数据与运算
1. 基本数据类型
C++ 数据类型分为「内置类型」和「自定义类型」(后续类 / 结构体),内置类型核心如下:
- 关键字:
sizeof(类型/变量)查看占用字节数,如sizeof(int) → 4; - 注意:浮点型默认是
double,float需加后缀f,否则可能精度警告。
2. 变量与常量
变量:可修改的存储单元,必须「先定义 / 初始化,后使用」(避免野值); 常量:不可修改的量,两种定义方式:
3. 运算符
按功能分类,核心注意点如下:
- 优先级:括号
()最高,算术 > 关系 > 逻辑 > 赋值(不确定就加括号)。
三、控制流:程序执行逻辑
1. 分支结构
- if-else:处理多条件判断
switch-case:处理多常量分支(需加
break避免穿透)
2. 循环结构
- for 循环:适合已知循环次数 while 循环:适合未知循环次数(先判断后执行) do-while 循环:至少执行一次(先执行后判断)
- 循环控制:
break(跳出当前循环)、continue(跳过本次循环剩余代码)。
四、函数:代码复用与模块化
1. 函数的定义与调用
- 结构:
返回类型 函数名 (参数列表) { 函数体; return 返回值; } - 示例:
2. 关键特性
- 函数声明:声明与定义分离(头文件
.h声明,源文件.cpp定义),解决多文件复用问题: 函数重载:同一作用域下,函数名相同,参数列表(个数 / 类型 / 顺序)不同(返回值不影响): 默认参数:从右往左指定默认值,不可跳过前面参数:
五、数组与字符串:批量数据存储
1. 数组
- 初始化与访问:注意:数组名是「首元素地址」,作为函数参数时会退化为指针(需手动传递长度):
定义:
类型 数组名 [长度];(长度必须是常量,C++11 支持变量长度但不推荐)
2. 字符串
- 两种方式:
- C 风格字符串(字符数组):
char str[] = "hello";(末尾隐含'�'作为结束标志); - C++ 风格字符串(
string类,推荐):需包含<string>头文件,支持直接拼接、长度获取等:
- C 风格字符串(字符数组):
六、指针与引用:内存访问利器
1. 指针
- 定义:
类型* 指针名;(存储变量的内存地址,*表示指针) 核心操作:
2. 引用
- 定义:
类型& 引用名 = 原变量;(原变量的「别名」,必须初始化,且不能改指向) - 示例: 指针 vs 引用:
七、面向对象基础(C++ 核心)
C++ 核心特性是「面向对象」,核心思想是「封装、继承、多态」,基础如下:
1. 类与对象
- 类:自定义数据类型,包含「成员变量」(属性)和「成员函数」(行为);
- 对象:类的实例(如
Person是类,zhangsan是对象)。 - 示例:
2. 访问控制
public:类外可访问(暴露接口);private:仅类内可访问(隐藏实现,封装核心);protected:类内 + 子类可访问(继承用)。
3. 构造函数与析构函数
- 构造函数:
- 无参构造:
Person()(若未定义任何构造函数,编译器自动生成默认无参构造); - 有参构造:如上面的
Person(string n, int a); - 拷贝构造:
Person(const Person& p)(用已有对象初始化新对象)。
- 无参构造:
- 析构函数:
~类名 (),无参数无返回值,对象销毁时自动调用(释放资源,如堆内存):
八、STL 入门:标准模板库(常用工具)
STL 是 C++ 标准库的核心,提供「容器」(存储数据)、「算法」(操作数据)、「迭代器」(遍历容器),新手需掌握以下常用组件:
1. 容器(常用)
- vector(动态数组):支持随机访问,尾部插入 / 删除高效,需包含
<vector>; - string:前面已讲,替代 C 风格字符串。
2. 算法(常用)
需包含 <algorithm> 头文件:
sort():排序(默认升序);find():查找(返回迭代器,未找到返回end())
九、常见注意事项(避坑指南)
- 变量初始化:内置类型变量(如
int)未初始化会是随机值(野值),必须初始化; - 数组越界:下标超过
长度 -1会访问非法内存,导致程序崩溃; - 指针安全:使用指针前先判断是否为
nullptr,避免野指针; - 内存管理:
new分配的堆内存必须用delete释放(数组用delete[]),否则内存泄漏: - 头文件保护:自定义头文件需加保护,避免重复包含:
- 命名空间:
using namespace std;虽方便,但可能导致命名冲突,大型项目建议显式写std::cout
