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

【C++基础知识详细记录】

一、基础知识

C++基础知识点的汇总涵盖了许多方面,包括但不限于以下内容:

1. 常量定义

  • 使用#define宏定义常量:

    #define PI 3.14159265358979323846 // 宏定义一个浮点型常量PI
    
  • 使用const关键字定义常量:

    const int MAX_SIZE = 100; // 常量MAX_SIZE不可修改
    const double PI = 3.14159265358979323846;
    

2. 关键字

  • C++中有特定的关键字,如intdoublevoidifelseforwhileswitchcasedefaultclassstructnamespaceconststatic等,它们在程序中有特殊的含义和用途。

3. 标识符命名规则

  • 标识符是用来给变量、函数、类等命名的。

  • 规则包括:

    • 必须以字母或下划线(_)开头。
    • 后续字符可以是字母、数字或下划线。
    • 关键字不能作为标识符使用。
    • C++中标识符区分大小写。

4. 变量声明与定义

  • 变量可以在需要时定义,并且可以指定初始值。

    int age = 25; // 定义并初始化一个整型变量age
    

5. 数据类型

  • C++支持多种数据类型,包括基本类型(如int, char, float, double)、枚举类型、指针类型以及用户自定义类型(通过结构体、联合体和类实现)。

6. 控制结构

  • 条件语句:

    if (age >= 18) {cout << "Adult"; 
    } else {cout << "Minor";
    }
    
  • 循环语句:

    for (int i = 0; i < 10; ++i) {cout << i << " ";
    }
    while (condition) {// 循环体
    }
    

7. 函数

  • 函数定义和调用:

    // 函数定义
    int add(int a, int b) {return a + b;
    }// 函数调用
    int result = add(3, 5);
    

8. 数组和字符串

  • 数组声明和使用:

    int numbers[5] = {1, 2, 3, 4, 5};
    
  • 字符串通常通过std::string来处理:

    std::string name = "John Doe";
    

9. 指针与引用

  • 指针示例:

    int value = 10;
    int* ptr = &value; // 指针ptr指向变量value
    *ptr = 20; // 通过指针修改值
    
  • 引用示例:

    int num = 15;
    int& ref = num; // 引用ref绑定到num
    ref = 30; // 通过引用修改num的值
    

10. 命名空间

  • 命名空间用于避免标识符冲突:

    namespace MyNamespace {int func() {return 42;}
    }
    using namespace MyNamespace; // 引入整个命名空间
    // 或者
    MyNamespace::func(); // 显式指定命名空间
    

11. 面向对象编程

  • 类定义:

    class Animal {
    public:Animal(const std::string& name) : name_(name) {}void speak() const {cout << "Animal speaks!" << endl;}
    private:std::string name_;
    };int main() {Animal dog("Rex");dog.speak();return 0;
    }
    

二、 进阶

当然,以下是这些C++高级概念的详细说明以及代码示例:

1. 模板(Templates)

说明:模板允许你定义泛型类或函数,即适用于多种数据类型的类和函数。它们在编译时进行实例化,生成具体的数据类型版本。

代码示例

// 函数模板
template <typename T>
T max(T a, T b) {return (a > b) ? a : b;
}int main() {cout << max<int>(5, 10) << endl; // 直接指定类型为intcout << max(3.14, 2.71) << endl; // 编译器自动推断为double类型
}// 类模板
template <typename T>
class Stack {
public:void push(T item) { ... }T pop() { ... }
private:std::vector<T> data;
};int main() {Stack<int> intStack;intStack.push(10);Stack<std::string> strStack;strStack.push("Hello");
}

2. 异常处理

说明:C++提供了一种结构化的错误处理机制,通过trycatchthrow关键字来捕获和抛出异常。

代码示例

#include <stdexcept>void divide(int a, int b) {if (b == 0) {throw std::invalid_argument("Divisor cannot be zero!"); // 抛出异常}int result = a / b;// ...
}int main() {try {divide(10, 0); // 可能引发异常的操作} catch (const std::invalid_argument& e) {std::cerr << "Caught exception: " << e.what() << '\n';}return 0;
}

3. STL容器

说明:标准模板库(STL)提供了多种容器,如std::vectorstd::liststd::map等,用于存储和管理数据。

代码示例

#include <vector>
#include <list>
#include <map>int main() {// 容器使用示例std::vector<int> vec{1, 2, 3, 4, 5}; // 动态数组std::list<int> lst{6, 7, 8, 9, 10}; // 双向链表std::map<std::string, int> m{{"apple", 1}, {"banana", 2}}; // 关联容器(键值对)vec.push_back(6);lst.push_back(11);for (const auto& item : vec) {std::cout << item << ' ';}std::cout << '\n';return 0;
}// 使用迭代器访问容器元素
for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << ' '; // 输出vector中的每个元素
}

4. 迭代器(Iterators)

说明:迭代器是访问容器内元素的一种通用接口,就像指针一样可以遍历容器内的元素。

代码示例

std::vector<int> numbers = {1, 2, 3, 4, 5};
for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {std::cout << *it << ' ';
} // 输出1 2 3 4 5// C++11之后推荐使用范围基础迭代器语法
for (auto it : numbers) {std::cout << it << ' ';
}

5. 智能指针(Smart Pointers)

说明:智能指针是一种对象,它存储指向动态分配的对象的指针,并在其生命周期结束时自动释放该对象,避免内存泄漏。常见的智能指针有std::unique_ptrstd::shared_ptrstd::weak_ptr

代码示例

#include <memory>class MyClass {
public:MyClass() { /* 构造函数 */ }~MyClass() { /* 析构函数 */ }
};int main() {// unique_ptr 示例std::unique_ptr<MyClass> uptr(new MyClass());// 当uptr超出作用域时,其内部的MyClass对象会被自动删除// shared_ptr 示例std::shared_ptr<MyClass> sptr(new MyClass());// 多个shared_ptr可以共享同一个对象,所有shared_ptr销毁后才释放对象return 0;
}

6. RAII(Resource Acquisition Is Initialization)原则

说明:RAII是一种编程技术,资源获取时机与初始化同步,确保了资源的生命周期与对应的对象绑定在一起,使得资源在对象析构时自动释放。例如,智能指针就是RAII的一个典型应用。

7. 多态性(Polymorphism)

说明:多态性允许不同类的对象响应相同的调用请求,实现不同的行为。主要通过虚函数(virtual functions)和抽象基类(abstract base classes)实现。

代码示例

class Animal {
public:virtual void speak() const = 0; // 纯虚函数,声明一个抽象基类
};class Dog : public Animal {
public:void speak() const override {std::cout << "Woof!" << std::endl;}
};class Cat : public Animal {
public:void speak() const override {std::cout << "Meow!" << std::endl;}
};int main() {Animal* dog = new Dog();Animal* cat = new Cat();dog->speak(); // 输出"Woof!"cat->speak(); // 输出"Meow!"delete dog;delete cat;return 0;
}

相关文章:

【C++基础知识详细记录】

一、基础知识 C基础知识点的汇总涵盖了许多方面&#xff0c;包括但不限于以下内容&#xff1a; 1. 常量定义 使用#define宏定义常量&#xff1a; #define PI 3.14159265358979323846 // 宏定义一个浮点型常量PI使用const关键字定义常量&#xff1a; const int MAX_SIZE 100;…...

Socket网络编程(五)——TCP数据发送与接收并行

目录 主要实现需求TCP 服务端收发并行重构启动main方法重构重构分离收发消息的操作重构接收消息的操作重构发送消息TCPServer调用发送消息的逻辑监听客户端链接逻辑重构Socket、流的退出与关闭 TCP 客户端收发并行重构客户端 main函数重构客户端接收消息重构客户端发送消息重构…...

2024最新-ubuntu22.04安装最新版QT6.6~6.8教程

​ 1. 在官网下载 online_installer&#xff1a; https://download.qt.io/archive/online_installers/4.7/qt-unified-linux-x64-4.7.0-online.run 或者直接镜像站下载&#xff1a; http://mirrors.ustc.edu.cn/qtproject/archive/online_installers/4.7/qt-unified-linux-x6…...

STM32------分析GPIO寄存器

一、初始LED原理图 共阴极led LED发光二极管&#xff0c;需要有电流通过才能点亮&#xff0c;当有电压差就会产生电流 二极管两端的电压差超过2.7v就会有电流通过 电阻的作用 由于公式IV/R 不加电阻容易造成瞬间电流无穷大 发光二极管工作电流为10-20MA 3.3v / 1kΩ 3.…...

数学实验-Matlab使用(1)

使用方法以及笔记均在文件中 class1_func1.m function f class1_func1(x) % f为输出&#xff0c;输出有多个时需要用中括号以矩阵的方式包起来 % x为输入f sin(x)class1_func2.m function [a,b,u,v] class1_func2(x,y)[a,b] eig(x)[u,v] eig(y)class1.m % 当语句后有…...

kafka文件存储机制和消费者

1.broker文件存储机制 去查看真正的存储文件&#xff1a; 在/opt/module/kafka/datas/ 路径下 kafka-run-class.sh kafka.tools.DumpLogSegments --files ./00000000000000000000.index 如果是6415那么这个会存储在563的log文件之中&#xff0c;因为介于6410和10090之间。 2.…...

《汇编语言》- 读书笔记 - 第15章-外中断

《汇编语言》- 读书笔记 - 第15章-外中断 15.1 接口芯片和端口15.2 外中断信息1. 可屏蔽中断&#xff08;Maskable Interrupt&#xff09;2. 不可屏蔽中断&#xff08;Non-Maskable Interrupt&#xff09;设计思想 15.3 PC 机键盘的处理过程1. 键盘输入2. 引发 9 号中断3. 执行…...

【Vue3】CSS 新特性

:slotted <template> <!-- App.vue--><Son ><div class"a">我要插入了</div></Son> </template><script setup lang"ts"> import Son from ./components/Son.vue </script><style></sty…...

四信水电站泄洪预警方案,精准提升防汛应急水平

2022年5月水利部办公厅发布《关于开展水库泄洪设施专项排查整改的紧急通知》&#xff0c;为坚决贯彻落实关于水库大坝安全的重要指示批示精神、关于保障水库泄洪通道通畅的批示要求&#xff0c;全力防范水库可能出现的重大险情&#xff0c;确保水库安全度汛。 2023年3月国家能源…...

k8s中容器的调度与创建:CRI,cgroup

container调度与创建 选自&#xff1a;K8s、CRI与container - packy的文章 - 知乎 https://zhuanlan.zhihu.com/p/102897620 Cgroup创建&#xff1a; cgexec -g cpu,memory:$UUID \ > unshare -uinpUrf --mount-proc \ > sh -c "/bin/hostname $UUID &…...

Unity安装与简单设置

安装网址&#xff1a;https://unity.cn 设置语言&#xff1a; 设置安装位置&#xff1a;否则C盘就会爆了 获取一个个人的资格证&#xff1a; 开始安装&#xff1a; 安装完毕。 添加模块&#xff1a;例如简体中文 新建项目&#xff1a; 布局2*3、单栏布局、 设置…...

数据库的介绍、分类、作用和特点

数据库是用来存储、管理和检索数据的集合系统。根据数据处理模型的不同&#xff0c;数据库可以分为多种类型&#xff0c;主要包括&#xff1a; 1、关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 介绍&#xff1a;关系型数据库使用表格形式来存储数据&#xff0c;并通…...

【Unity】机器人末端执行器仿真

机械手臂的末端执行器使用多项式来计算转动角度可能有几个原因&#xff1a; 精确控制&#xff1a;机械臂的运动通常需要高度的精确性&#xff0c;特别是在精密工作或复杂运动轨迹的情况下。多项式&#xff0c;特别是高阶的&#xff0c;可以很好地近似复杂的非线性关系和运动轨迹…...

更换个人开发环境后,pycharm连接服务器报错Authentication failed

原因&#xff1a;服务器中更换个人开发环境后&#xff0c;密码变了。 解决&#xff1a;在pycharm中修改服务器开发环境密码即可。 1 找到Tools-Depolyment-Configuration 2 点击SSH Configuration后的省略号 3 修改这里面的Password即可...

E - Bad Juice

解题思路 由于最后返回一个01字符串表示所选人的状态要求人数最少&#xff0c;即字符串长度最少而要用最少的字符&#xff0c;找出则返回的字符为二进制下的编号这样利用了所有的01字符号人表示二进制下位的情况注意对于2的次方项&#xff0c;只需要有位&#xff0c;可以用位均…...

用HTML5的<canvas>元素实现刮刮乐游戏

用HTML5的&#xff1c;canvas&#xff1e;元素实现刮刮乐游戏 用HTML5的<canvas>元素实现刮刮乐&#xff0c;要求&#xff1a;将上面的“图层”的图像可用鼠标刮去&#xff0c;露出下面的“图层”的图像。 示例从简单到复杂。 简单示例 准备两张图像&#xff0c;我这…...

TypeScript + react 中 TypeScript 的加入后 , 有哪些优化项目

在使用 TypeScript 结合 React 进行开发时&#xff0c;TypeScript 提供了许多优化和增强代码质量的方式。以下是一些关键的优化操作和最佳实践&#xff1a; 强类型组件属性&#xff08;Props&#xff09;和状态&#xff08;State&#xff09;: 使用接口或类型别名定义组件的 pr…...

Redis学习路径(构建体系)

学习路径 掌握数据类型&#xff08;分析底层数据结构&#xff09;和缓存的基本使用 (理论使用) 掌握 redis 实现高性能&#xff0c;高可靠、高可用技术 &#xff08;理论&#xff09;学习redis源代码底层实现 (底层实现) 先来一个引言&#xff0c;比较宏观的角度&#xf…...

【README 小技巧】 展示gitee中开源项目start

【README 小技巧】 展示gitee中开源项目start <a target"_blank" hrefhttps://gitee.com/wujiawei1207537021/wu-framework-parent><img srchttps://gitee.com/wujiawei1207537021/wu-framework-parent/badge/star.svg altGitee star/></a>...

tcping实用小工具

Tcping实用小工具命令详解 一、tcping介绍 tcping&#xff1a;tcping命令基于tcp协议监控&#xff0c;可以从较低级别的协议获得简单的&#xff0c;可能不可靠的数据报服务。 原则上&#xff0c;TCP应该能够在从容硬线连接到分组交换或电路交换网络的各种通信系统之上操作。 …...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...