C++ 入门全攻略:从基础语法到核心特性
2026/5/26 11:37:11 网站建设 项目流程

1 C++ 简介

1.1 起源

C++ 诞生于贝尔实验室,1979 年开始研发,最初被称为带类的 C,1983 年正式更名为 C++,是在 C 语言基础上扩展面向对象特性的编程语言。

1.2 应用范围

C++ 是高性能通用编程语言,应用场景覆盖:

  • 桌面软件:文字处理、电子表格
  • 底层开发:编译器、操作系统内核
  • 娱乐领域:大型 3D 游戏、游戏引擎
  • 工业 / 嵌入式:工控软件、嵌入式系统

1.3 C++ 与 C 的区别

  • C 语言:面向过程,结构化、模块化设计,专注流程实现
  • C++:兼容 C 所有特性,新增面向对象机制(类、继承、多态等),兼顾过程式与面向对象编程

2 常用 C++ 开发工具

根据学习阶段和场景选择,新手推荐轻量化工具,进阶用专业 IDE:

工具特点适用场景
记事本 / Notepad++ + 命令行极简、无依赖理解编译链接原理
Visual C++ 6.0经典老工具兼容旧项目,新系统有兼容性问题
Visual Studio 2015+功能强大、生态完整企业级开发、大型项目
Code::Blocks开源免费、轻量专业开发者、新手入门
其他Dev-C++、CLion、Xcode、C4droid跨平台 / 移动端开发

3 C++ 基本语法

3.1 核心概念

  • 对象:类的实例,拥有状态和行为
  • :对象的模板,定义对象的属性(状态)和方法(行为)
  • 方法:类的行为实现,一个类可包含多个方法
  • 变量:存储数据的标识符

3.2 注释

C++ 支持两种注释,用于代码说明:

// 单行注释:双斜杠开头,注释一行内容 /* 多行注释:斜杠星号开头,星号斜杠结尾 可注释多行内容 */

3.3 关键字

C++ 保留关键字共 63 个,不能用作标识符,常用关键字如下:asmelsenewthisautoenumoperatorthrowboolexplicitprivatetruebreakexportprotectedtrycaseexternpublictypedef等。

3.4 标识符

标识符用于命名变量、函数、类等,命名规则

  1. 开头:字母(A-Z/a-z)、下划线_
  2. 后续:字母、下划线、数字(0-9)
  3. 禁止:标点符号(@、&、%)
  4. 区分大小写:Namename是两个不同标识符

4 数据类型

4.1 基本数据类型

C++ 有7 种基本数据类型,搭配类型修饰符(signed/unsigned/short/long)扩展:

表格

类型占用字节(64 位 Win10+VS2015)数值范围
bool1true/false
char1-128~127
short2-32768~32767
int4-2147483648~2147483647
long4同 int
long long8-9e18~9e18
float4-3.4e38~3.4e38
double8-1.7e308~1.7e308
unsigned char10~255
unsigned int40~4294967295

测试代码:查看数据类型大小

#include namespace std; int main() { cout << sizeof(bool) < cout <) << " " <(short) < << sizeof(int) <; cout <(float) << " " << sizeof(double) < system("pause"); return 0; }

4.2 类型大小与系统的关系

数据类型占用字节受机器、操作系统、编译器影响

  • 16 位系统:int 占 2 字节
  • 32 位系统:int 占 4 字节
  • 64 位系统:VS 中 long 占 4 字节,GCC 中 long 占 8 字节

4.3 typedef 声明

为已有类型取别名,简化代码:

// 语法:typedef 原类型 新名称 typedef int feet; feet distance; // 等价于 int distance;

4.4 枚举类型

用户定义的整型派生类型,用于限定变量取值范围:

// 定义枚举 enum course {math, chinese, english=1, physics, chemistry}; // 默认:math=0, chinese=1, english=1, physics=2, chemistry=3 int main() { enum course c = english; cout << c << endl; // 输出1 return 0; }

5 变量

变量是程序可操作的存储区名称,类型决定存储大小和取值范围。

5.1 变量的声明与定义

  • 声明:告诉编译器变量存在,不分配内存,用extern关键字
  • 定义:分配内存,可多次声明,只能定义一次
// 变量声明 extern int a, b; int main() { // 变量定义 int a, b; a = 23; b = 25; return 0; }

错误赋值:int x = y = z = 66;正确赋值:int x=3, y=3, z=3;x = y = z;

5.2 变量作用域

  • 局部变量:函数 / 代码块内部,仅内部可访问,不自动初始化
  • 全局变量:函数外部,整个程序生命周期有效,系统自动初始化(int=0,char='\0',指针 = NULL)
int i = 66; // 全局变量 int main() { int i = 88; // 局部变量,覆盖全局变量 cout << i <; // 输出88 return 0; }

6 运算符

C++ 运算符分为 6 大类,优先级决定运算顺序(结合性:从左到右 / 从右到左):

6.1 运算符分类

  1. 算术运算符+-*/%++--
  2. 关系运算符==!=<=>=
  3. 逻辑运算符&&||!
  4. 位运算符&|^~`<
  5. 赋值运算符=+=-=*=/=
  6. 杂项运算符sizeof?:,.->强制转换、指针&/*

6.2 运算符优先级(从高到低)

后缀运算符 → 一元运算符 → 乘除 → 加减 → 移位 → 关系 → 相等 → 位运算 → 逻辑运算 → 条件 → 赋值 → 逗号


7 流程控制语法

7.1 循环结构

while 循环
while(条件) { // 0为false,非0为true 循环体; }
for 循环(C++11 增强 for)
// 普通for for(初始化; 条件; 增量) { 循环体; } // C++11范围for int array[5] = {11,22,33,44,55}; for(int x : array) { cout < <(auto x : array) { cout << x < } // auto自动推导类型

7.2 判断结构

if-else 判断
if(条件1) { 语句1; } else if(条件2) { 语句2; } else { 语句3; }
switch 判断
switch(表达式) { case 常量1: 语句1; break; case 常量2: 语句2; break; default: 默认语句; }

注意:casebreak穿透执行,多个case可共用语句。

7.3 三元运算符

// 条件?真执行:假执行 int a = 10, b = 20; int max = a > b ? a : b; // max=20

7.4 预处理命令

编译前执行的命令,包括宏定义、文件包含、条件编译

// 宏定义 #define PI 3.14 // 文件包含 #include 条件编译 #ifdef DEBUG cout <模式" <#else cout <发布模式" < #endif

8 数组

数组是相同类型数据的集合,用下标访问(下标从 0 开始)。

8.1 一维数组

// 定义+初始化 int arr1[4] = {1,2,3,4}; int arr2[4] = {1,2}; // 未赋值元素默认为0 int arr3[] = {1,2,3}; // 自动推导长度 // 访问:arr[下标] cout <1[0]; // 输出1

8.2 二维数组

// 定义+初始化 int arr[2][3] = {{1,2,3},{4,5,6}}; int arr2[][3] = {1,2,3,4,5,6}; // 可省略第一维长度 // 访问:arr[行下标][列下标] cout << arr[0][1]; // 输出2

8.3 字符数组(C 风格字符串)

\0结尾的 char 数组,是 C++ 字符串的基础:

char str[] = "hello"; // 等价于 {'h','e','l','l','o','\0'} cout < 输出hello

8.4 动态数组(new/delete)

// 一维动态数组 int* arr = new int[3]{1,2,3}; delete[] arr; // 释放内存 // 二维动态数组 int m=2, n=3; int** arr2 = new int*[m]; for(int i=0; i<m; i++) arr2[i] = new int[n];

8.5 数组与函数

数组传参本质是传首地址

// 一维数组传参 void fun(int arr[], int len) {} // 二维数组传参(必须指定第二维长度) void fun2(int arr[][3], int len) {}

8.6 获取数组大小

int arr[5]; // 方法1 int len = sizeof(arr)/sizeof(arr[0]); // 方法2 int len2 = end(arr) - begin(arr);

9 函数

函数是模块化编程的核心,C++ 程序有且仅有一个main主函数。

9.1 函数声明与定义

  • 声明:告诉编译器函数存在,参数名可省略
  • 定义:实现函数功能
// 函数声明 int max(int a, int b); // 函数定义 int max(int a, int b) { return a > b ? a : b; }

9.2 参数传递方式

  1. 传值:形参修改不影响实参
  2. 传指针:形参修改影响实参
  3. 传引用:形参修改影响实参(C++ 特色)
// 传引用 void swap(int &a, int &b) { int temp = a; a = b; b = temp; }

9.3 函数特性

  • 默认参数int sum(int a, int b=2) {return a+b;}
  • 嵌套调用:函数内调用其他函数
  • 递归调用:函数调用自身(需有终止条件)
  • 函数重载:同名函数,参数类型 / 个数不同
  • 内联函数inline关键字,编译时嵌入主函数,减少调用开销

10 字符串(string)

C++ 支持C 风格字符数组STL string 类,推荐用 string 更安全便捷。

10.1 C 风格字符串

基于 char 数组,依赖\0结束,需用<cstring>库函数操作:

char str1[10] = "abc"; strcat(str1, "def"); // 拼接 strcpy(str1, "hello"); // 复制 strcmp(str1, "hello"); // 比较 strlen(str1); // 长度(不含\0)

10.2 C++ string 类

`,支持直接赋值、拼接、比较:

#include string str1 = "Hello"; string str2 = "C++"; string str3 = str1 + " " + str2; // 拼接 cout << str3.size(); // 获取长度 cout <.substr(0,5); // 截取子串

11 指针和引用

11.1 指针

指针是存储变量地址的变量*表示指针,&表示取地址:

int a = 10; int* p = &a; // p存储a的地址 cout <解引用,输出a的值10 // 指针运算:p+1 移动sizeof(类型)字节
指针与数组

数组名是首地址常量

int arr[3] = {1,2,3}; int* p = arr; cout <1); // 等价于arr[1],输出2
new/delete 动态内存
int* p = new int(10); // 分配单个变量 delete p; int* arr = new int[3]; // 分配数组 delete[] arr;

11.2 引用

引用是变量的别名,不占内存,定义时必须初始化:

int a = 10; int& b = a; // b是a的引用 b = 20; // 修改b等价于修改a cout <输出20

引用作为函数返回值时,不能返回局部变量引用


12 自定义数据类型

12.1 结构体(struct)

可包含不同类型成员的自定义类型:

struct Person { string name; int age; }; // 定义+初始化 Person p = {"张三", 20}; cout <访问成员

12.2 字节对齐

结构体占用空间按字节对齐规则分配,提升内存访问效率。


13 面向对象(核心)

C++ 是面向对象编程语言,三大特性:封装、继承、多态

13.1 类与对象

  • :抽象模板,定义属性和方法
  • 对象:类的实例
class Student { private: // 私有成员,仅类内访问 string name; int age; public: // 公有成员,外部可访问 // 构造函数 Student(string n, int a) { name = n; age = a; } // 成员函数 void show() { cout << name << " " <; } }; // 创建对象 Student s("李四", 18); s.show();

13.2 继承

派生类继承基类成员,减少代码冗余:

// 基类 class Animal { public: void eat() { cout <" <}; // 派生类:公有继承 class Dog : public Animal { public: void bark() { cout <" <}; // 使用 Dog d; d.eat(); // 继承基类方法 d.bark();

13.3 多继承与虚基类

  • 多继承:一个类继承多个基类
  • 虚基类:virtual继承,解决多继承二义性,仅保留一份基类成员
class A { /* ... */ }; class B : virtual public A { /* ... */ }; class C : virtual public A { /* ... */ }; class D : public B, public C { /* ... */ };

14 多态和虚函数

14.1 向上转型

派生类对象 / 指针 / 引用赋值给基类,仅能访问基类成员。

14.2 虚函数

virtual声明,实现动态多态,运行时确定调用函数:

class Base { public: virtual void show() { cout < < class Derive : public Base { public: void show() { cout << "派生类" << endl; } }; int main() { Base* p = new Derive(); p->show(); // 输出派生类(多态) delete p; return 0; }

14.3 纯虚函数与抽象类

  • 纯虚函数:virtual void show() = 0;
  • 抽象类:包含纯虚函数,不能创建对象,仅作为基类使用

15 运算符重载

赋予运算符自定义功能,本质是函数重载:

class Vector { public: int x, y; Vector(int x=0, int y=0) : x(x), y(y) {} // 重载+运算符 Vector operator+(const Vector& v) { return Vector(x+v.x, y+v.y); } }; int main() { Vector v1(1,2), v2(3,4); Vector v3 = v1 + v2; cout < << " " <.y; // 输出4 6 return 0; }

不能重载的运算符:..*::sizeof?:


16 IO 流与文件操作

16.1 标准 IO 流

  • cin:标准输入(键盘)
  • cout:标准输出(屏幕)
  • cerr/clog:错误输出
#include std; int main() { int a; cin >> a; // 输入 cout < << a < 输出 return 0; }

16.2 文件操作

C++ 用fstream库操作文件,支持文本文件二进制文件

#include // 写入文件 ofstream out("test.txt"); out <++"; out.close(); // 读取文件 ifstream in("test.txt"); string str; in >> str; cout <();

17 泛型与模板

模板是泛型编程的核心,实现代码复用,支持函数模板和类模板。

17.1 函数模板

template<class T> // T为泛型类型 T max(T a, T b) { return a > b ? a : b; } int main() { cout << max(1,2); // int类型 cout <,2.2); // double类型 return 0; }

17.2 类模板

template class Box { private: T data; public: Box(T d) : data(d) {} T getData() { return data; } }; int main() { Box b(10); cout < return 0; }

18 命名空间与异常处理

18.1 命名空间

解决命名冲突,C++ 标准库都在std命名空间:

namespace MySpace { int a = 10; void fun() { cout <自定义空间" < } } // 使用 using namespace MySpace; // 引入整个空间 cout < ### 18.2 异常处理 `try`检查异常,`throw`抛出异常,`catch`捕获异常: ```cpp try { throw 10; // 抛出int类型异常 } catch(int e) { cout <捕获异常:" <; } catch(...) { // 捕获所有异常 cout <异常"; }

19 STL 标准模板库

STL 是 C++通用数据结构与算法集合,核心三大组件:

19.1 容器

  • 顺序容器:vector(动态数组)、dequelist
  • 关联容器:setmapmultimap
  • 容器适配器:stackqueuepriority_queue

19.2 迭代器

遍历容器的指针 - like工具:

vector = {1,2,3}; vectoriterator it; for(it = v.begin(); it != v.end(); it++) { cout < <``` ### 19.3 算法 STL提供70+通用算法(`#include <algorithm>`): ```cpp #include vector {3,1,2}; sort(v.begin(), v.end()); // 排序 find(v.begin(), v.end(), 2); // 查找

总结

本文覆盖 C++入门到进阶所有核心知识点,从基础语法到面向对象、模板、STL,搭配可直接运行的代码示例,适合新手系统学习。

C++ 学习建议:

  1. 先掌握语法和基础数据类型,多写简单程序
  2. 深入理解指针、引用、面向对象三大特性
  3. 熟练使用 STL 容器和算法,提升开发效率
  4. 结合项目实践,巩固知识点

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询