当前位置: 首页 > news >正文

C++速成指南:从基础到进阶

C++ 是一门功能强大且复杂的编程语言,广泛应用于系统编程、游戏开发、高性能计算等领域。对于刚入门的开发者来说,C++ 的学习曲线可能会显得陡峭。本文将带领你快速掌握 C++ 的核心概念和常用特性,帮助你在短时间内建立起扎实的基础。


一、C++ 基础语法

1. 小程序 “Hello World”

让我们从最经典的 “Hello World” 程序开始:

#include <iostream>int main() {std::cout << "Hello World!" << std::endl;return 0;
}
  • #include <iostream>:包含输入输出流库。
  • std::cout:标准输出流,用于向控制台输出内容。
  • std::endl:表示换行。

2. 命名空间

为了避免命名冲突,C++ 引入了命名空间的概念。std 是标准库的命名空间。

using namespace std;  // 引入整个 std 命名空间(不推荐在实际项目中使用)

3. 字面量

字面量是直接出现在代码中的值,例如:

int num = 42;      // 整数字面量
double pi = 3.14;  // 浮点数字面量
char c = 'A';      // 字符字面量

4. 变量

变量用于存储数据,声明变量时需要指定类型:

int a = 10;      // 整数
double b = 3.14; // 浮点数
bool c = true;    // 布尔值

5. 运算符

C++ 支持多种运算符,包括:

  • 算术运算符:+, -, *, /, %
  • 赋值运算符:=, +=, -=
  • 比较运算符:==, !=, >, <, >=, <=
int a = 5, b = 3;
int sum = a + b;   // 8
int diff = a - b;  // 2

6. 枚举

枚举用于定义一组命名的整数常量:

enum Direction {UP, DOWN, LEFT, RIGHT
};

7. 结构体

结构体(struct)用于封装多个相关数据成员:

struct Point {int x;int y;
};

8. 条件语句

int a = 5;
if (a > 0) {std::cout << "a is positive" << std::endl;
} else if (a == 0) {std::cout << "a is zero" << std::endl;
} else {std::cout << "a is negative" << std::endl;
}

9. 条件运算符

int a = 5;
int b = (a > 0) ? 1 : 0;  // b = 1

10. 逻辑比较运算符

bool a = true, b = false;
bool c = a && b;  // false
bool d = a || b;  // true

11. 三向比较运算符(C++20)

int a = 5, b = 10;
std::cmp_lessgreater cmp = a <=> b;  // cmp = std::less

二、函数与代码组织

12. 函数

函数是代码的可重用块,用于执行特定任务:

void greet() {std::cout << "Hello!" << std::endl;
}int add(int a, int b) {return a + b;
}

13. 属性

属性([[attribute]])用于向编译器提供额外信息,例如:

[[nodiscard]] int computeSomething() {// 返回一个重要的值,建议调用者检查返回值return 42;
}

三、数据结构与容器

14. 数组

C 风格数组
int arr[5] = {1, 2, 3, 4, 5};  // 长度为 5 的数组
std::array

std::array 是固定大小的数组容器,提供更好的类型安全性和功能:

#include <array>std::array<int, 5> arr = {1, 2, 3, 4, 5};

15. std::vector

std::vector 是动态数组,支持动态扩展:

#include <vector>std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6);  // 添加元素

16. std::pair

std::pair 用于存储两个相关联的值:

#include <utility>std::pair<int, double> p = {1, 3.14};

17. std::optional

std::optional 用于表示一个值可能存在或不存在:

#include <optional>std::optional<int> opt = 42;
if (opt) {std::cout << *opt << std::endl;
}

18. 结构化绑定

结构化绑定(C++17 引入)可以简化对容器的访问:

std::pair<int, int> p = {1, 2};
auto [a, b] = p;  // a = 1, b = 2

19. 初始化列表

初始化列表({})用于初始化容器或结构体:

std::vector<int> vec = {1, 2, 3, 4, 5};
struct Point p = {1, 2};

四、字符串与面向对象编程

20. C++ 中的字符串

std::string 是 C++ 中的字符串类,提供丰富的功能:

#include <string>std::string str = "Hello";
str += " World!";  // str = "Hello World!"

21. 作为面向对象语言的 C++

C++ 支持面向对象编程(OOP),包括类、对象、继承和多态。

类与对象
class Point {
public:int x;int y;
};Point p;
p.x = 1;
p.y = 2;
继承
class Animal {
public:virtual void sound() = 0;  // 纯虚函数
};class Dog : public Animal {
public:void sound() override {std::cout << "Woof!" << std::endl;}
};
多态
Animal* a = new Dog();
a->sound();  // 输出 "Woof!"
delete a;

五、作用域与内存管理

22. 作用域解析

作用域解析运算符 :: 用于访问全局作用域或特定命名空间中的成员:

namespace MyNamespace {int value = 42;
}int main() {int value = 5;std::cout << MyNamespace::value << std::endl;  // 42std::cout << ::value << std::endl;            // 5(全局作用域)
}

23. 指针和动态内存

指针用于直接操作内存地址:

int* p = new int(42);  // 动态分配内存
std::cout << *p << std::endl;  // 42
delete p;  // 释放内存

24. const 的用法

const 用于声明常量:

const int a = 42;  // a 不能被修改
const int* p = &a;  // p 指向常量
int const* p2 = &a;  // 同上

25. constexpr 关键字

constexpr 用于在编译时计算常量表达式:

constexpr int square(int x) {return x * x;
}
int a = square(5);  // a = 25,编译时计算

26. consteval 关键字

consteval(C++23 引入)用于强制函数在编译时执行:

consteval int cube(int x) {return x * x * x;
}
int a = cube(3);  // a = 27,编译时计算

27. 引用

引用用于创建变量的别名:

int a = 42;
int& ref = a;  // ref 引用 a
ref = 50;      // a 变为 50

28. const_cast()

const_cast 用于去除 const 限定:

const int a = 42;
int* p = const_cast<int*>(&a);  // 去除 const 限定
*p = 50;  // 修改 a 的值(虽然 a 是 const,但这里是不安全的操作)

六、异常处理与类型系统

29. 异常

异常用于处理程序运行时的错误:

try {throw std::runtime_error("An error occurred");
} catch (const std::exception& e) {std::cout << e.what() << std::endl;  // 输出 "An error occurred"
}

30. 类型别名

类型别名用于为现有类型创建新的名称:

using MyInt = int;
MyInt a = 42;

31. 类型定义

typedef 用于定义类型别名:

typedef int MyInt;
MyInt a = 42;

32. 类型推断

autodecltype 用于推断变量的类型:

auto a = 42;      // a 是 int
auto b = 3.14;    // b 是 double

七、标准库与高级特性

33. 标准库(STL)

C++ 标准库(STL)提供了丰富的功能,包括容器、算法、迭代器等。例如:

#include <vector>
#include <algorithm>std::vector<int> vec = {3, 1, 4, 1, 5};
std::sort(vec.begin(), vec.end());  // 排序后 vec = {1, 1, 3, 4, 5}

34. 统一初始化

统一初始化语法(C++11 引入)允许使用 {} 初始化所有对象:

int a = {5};         // 初始化为 5
std::vector<int> v = {1, 2, 3};  // 初始化为 {1, 2, 3}

总结

C++ 是一门功能强大的语言,但也需要时间和实践来掌握。本文从基础语法到面向对象编程,再到内存管理和高级特性,为你提供了一个全面的速成指南。希望这篇文章能帮助你快速入门 C++,并在后续的学习中不断深入。

http://www.dtcms.com/a/358174.html

相关文章:

  • WebGIS视角:体感温度实证,哪座“火炉”火力全开?
  • 【AI基础:深度学习】30、深度解析循环神经网络与卷积神经网络:核心技术与应用实践全攻略
  • BMC-differences between the following App Visibility event classes
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的用户活跃度提升与价值挖掘策略研究
  • 设计模式之代理模式!
  • observer pattern 最简上手笔记
  • REST API 是无状态的吗,如何保障 API 的安全调用?
  • [ZJCTF 2019]NiZhuanSiWei
  • [BUUCTF]jarvisoj_level3_x64详解(含思考过程、含知识点讲解)
  • 批量采集培训机构数据进行查询
  • Axios 实例配置指南
  • 基于物联网设计的园林灌溉系统(华为云IOT)_274
  • k8s--efk日志收集
  • PostgreSQL令牌机制解析
  • C++多态介绍
  • sunset: sunrise
  • 安全多方计算(MPC):技术原理、典型应用与 Python 工程实现详解
  • POLAR 社区交流平台 PRD v1.0
  • DDR5 介绍
  • 关于PXIe工控机的网速问题XH-PXIe7313万兆网卡
  • 【LeetCode每日一题】21. 合并两个有序链表 2. 两数相加
  • Linux三剑客grep-sed-awk
  • # `std::basic_istream`总结
  • 从零到一:使用Flask构建“我的笔记”网站
  • Elasticsearch面试精讲 Day 2:索引、文档与映射机制
  • 如何在 Jenkins Docker 容器中切换到 root 用户并解决权限问题
  • WPF和WinFrom区别
  • WPF中的ref和out
  • 基于Ubuntu本地GitLab 搭建 Git 服务器
  • 小迪安全v2023学习笔记(七十四讲)—— 验证机制篇验证码绕过思路SRC挖掘演示