C++核心语法精要指南
一、基础语法
数据类型
- 基本类型:
int
、float
、double
、char
、bool
等,以及修饰符short
、long
、unsigned
。 - 复合类型:数组(同类型元素的集合)、结构体(
struct
,不同类型数据的组合)、联合体(union
,共享内存的多类型数据)。
- 基本类型:
函数
- 由返回值类型、函数名、参数列表和函数体组成,用于封装可复用的代码块。
- 函数重载:同一作用域内,函数名相同但参数列表(类型、个数、顺序)不同的函数,编译器通过参数匹配区分。
指针与引用
- 指针:存储变量地址的变量,可通过
*
访问指向的内容,支持nullptr
(空指针)。 - 引用:变量的别名(
int &ref = a
),必须初始化且不可更改指向,本质是常量指针的语法糖。
- 指针:存储变量地址的变量,可通过
二、面向对象(OOP)
类与对象
- 类(
class
):封装数据(成员变量)和操作(成员函数)的模板,通过private
、public
、protected
控制访问权限。 - 对象:类的实例,通过
new
创建(动态对象)或直接定义(栈对象)。
- 类(
继承
- 派生类继承基类的成员,实现代码复用。
- 继承方式:
public
(基类成员权限不变)、protected
(基类公有成员变为保护)、private
(基类公有 / 保护成员变为私有)。 - 注意:基类的构造函数、析构函数、
operator=
不能被继承。
多态
- 静态多态:编译期确定(函数重载、运算符重载)。
- 动态多态:运行期确定,通过虚函数实现:
- 基类中用
virtual
声明虚函数,派生类重写(override
)该函数。 - 需通过基类指针或引用调用,才能触发动态绑定。
- 基类中用
封装与抽象
- 封装:隐藏内部实现细节,仅暴露必要接口(如
public
成员函数)。 - 抽象:通过纯虚函数(
virtual int func() = 0
)定义接口类(抽象类),无法实例化,强制派生类实现具体功能。
- 封装:隐藏内部实现细节,仅暴露必要接口(如
三、内存管理
内存分区
- 栈(Stack):存放局部变量、函数参数,自动分配和释放,大小固定。
- 堆(Heap):动态内存,通过
new
分配、delete
释放(数组用delete[]
),需手动管理,否则可能内存泄漏。 - 全局 / 静态区:存放全局变量、静态变量(
static
),程序结束后释放。
智能指针
- 自动管理堆内存,避免手动
delete
的风险:unique_ptr
:独占所有权,不可复制,可移动。shared_ptr
:共享所有权,通过引用计数管理释放。weak_ptr
:配合shared_ptr
使用,不增加引用计数,解决循环引用问题。
- 自动管理堆内存,避免手动
四、其他核心概念
const 关键字
- 修饰变量:值不可修改(
const int a = 5
)。 - 修饰指针:
const int* p
(指向常量的指针)、int* const p
(常量指针)。 - 修饰成员函数:
void func() const
,不可修改类的成员变量(mutable
修饰的变量除外)。
- 修饰变量:值不可修改(
命名空间(namespace)
- 避免命名冲突,通过
namespace 名称 { ... }
定义,使用时加namespace::成员
或using namespace 名称
。
- 避免命名冲突,通过
模板(Template)
- 泛型编程工具,定义与类型无关的代码:
- 函数模板:
template <typename T> T add(T a, T b) { return a + b; }
。 - 类模板:
template <typename T> class Vector { ... };
,支持不同类型的容器实现。
- 函数模板:
- 泛型编程工具,定义与类型无关的代码:
异常处理
- 通过
try
(可能出错的代码)、throw
(抛出异常)、catch
(捕获并处理异常)机制,替代传统错误码,提高代码健壮性。
- 通过