C++必须掌握的知识点

news2024/12/30 3:13:50

面向对象的三大特性

封装

继承

  1. 父类中所有的非静态成员都会被子类继承下去,只是父类的私有成员被编译器屏蔽了,访问不到。
  2. 可以利用开发人员工具查看对象模型在这里插入图片描述
  3. 继承中,先构造父类,再构造子类,析构的顺序和构造的顺序完全相反
  4. 父类和子类有同名的成员时,可以利用域限定符来访问特定的值
  5. 如果子类中出现和父类同名的函数时,子类的这个函数会覆盖父类中的所有同名函数(override),如果想访问父类的,需要使用域限定符。
  6. 虚函数实现的底层就是虚函数表(vbtable和vbptr),具体可以看我的这篇文章:虚函数解析
    在这里插入图片描述
    在这里插入图片描述

多态

  1. 动态多态(运行时多态)的条件:有继承关系,子类重写(override)父类的虚函数
  2. 使用:用父类指针或者应用,指向子类的对象。
  3. 在多态中,通常情况下,父类的虚函数都是无意义的,主要是调用子类的重写内容,因此通常将虚函数改为纯虚函数。当类中有纯虚函数时,这个类就叫做抽象类(无法实例化对象)。
  4. 在使用多态时,如果子类中有属性使用到了堆空间,那么父类指针在释放时无法调用到子类的析构代码,因此父类的析构函数也应该改为虚析构函数或者纯虚析构函数

文件操作

文件的打开方式

示例代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Person{
    public:
    int age = 25;
    char name[64] = "张三";
};

int main(){
    Person* p = new Person();
    p->age = 30;
    fstream out = fstream("person1.txt",ios::out|ios::binary);
    out.write((const char*)p,sizeof(Person));
    out.close();
    
    fstream in = fstream("person1.txt",ios::in|ios::binary);
    Person p2;
    in.read((char*)&p2,sizeof(Person));
    //  在win中 读出来的二进制是对的,但是在终端打印的时候会出现问题
    system("chcp 65001");
    cout << p2.name << " ," << p2.age <<endl;
    out.close();
}

在这里插入图片描述

以binary方式读写文件:read,write方法

模板

  1. 在使用模板的时候,头文件(.h)和实现的(.cpp)文件不能分文件编写。可以写在一起成为.hpp文件。

  2. 类模板不能进行自动类型推导,只能用<>显示指示类型
    在这里插入图片描述

  3. 类模板在模板参数列表中可以有默认参数在这里插入图片描述

  4. 函数模板可以进行自动类型推导,所以在使用模板函数的时候不用指定模板参数类型。

STL主要分为以下六类

容器:各种数据结构,用来存放数据

  1. vector:类似于数组在这里插入图片描述
    在这里插入图片描述

  2. string:字符串
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. list:类似于链表,内部有空间适配器进行内存管理在这里插入图片描述

  4. deque:双向队列
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. set:集合(set,mutil_set,unordered_set)在这里插入图片描述

  6. map:映射(map.mutil_map.unordered_map)

算法

  1. sort

  2. find

  3. copy

  4. for_each
    在这里插入图片描述

  5. find_if

  6. transform在这里插入图片描述

  7. adjacent_find:在这里插入图片描述

  8. binary_search:二分查找在这里插入图片描述

  9. merge:在这里插入图片描述

  10. 算术生成算法(头文件:numeric)在这里插入图片描述

  11. 集合(必须是有序序列)运算:set_intersection(交),set_union(并),set_difference(差)
    在这里插入图片描述

迭代器:容器与算法之间的桥梁

仿函数:行为类似函数,可作为算法的某种自定义策略。

  1. 函数对象:重载“()”的类其对象称为函数对象,也叫仿函数。函数对象可以有自己的状态,也可以作为参数进行传递。(也可以使用function<>模板类进行传递和接收)。
  2. 谓词:返回bool类型的仿函数称为谓词,接收一个参数的叫一元谓词,两个参数叫二元谓词。
  3. STL提供了一些内建函数对象:在这里插入图片描述

适配器:用来修饰容器,仿函数或者迭代器接口

  1. 概念:STL 提供了序列式容器,同时针对序列式容器提供了应用于不同场景的容器适配器,通俗讲适配器就是以序列式容器为底层数据结构,进一步封装了的为适应场景应用的容器。STL 中提供了三种适配器,分别为 stack,queue 和 priority_queue。

空间配置器:负责空间的配置和管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT系列第8节 自定义对话框

在实际业务开发中经常要有各种各样的对话框来处理用户信息&#xff0c;本节就结合例子来说明如何自定义对话框。 目录 1.创建对话框 2.创建非模态对话框 3.创建模态对话框 4.综合案例 1.创建对话框 &#xff08;1&#xff09;项目鼠标右键菜单 - 添加新文件 &#xff08;…

Hexo + Butterfly 自定义页脚

原文链接 &#xff1a;Hexo Butterfly 自定义页脚 推荐阅读 基于 Hexo 从零开始搭建个人博客&#xff08;一&#xff09;: 环境准备基于 Hexo 从零开始搭建个人博客&#xff08;二&#xff09;: 项目初识基于 Hexo 从零开始搭建个人博客&#xff08;三&#xff09;: 主题安装…

CSDN每日一练最长递增的区间长度 C语言

题目名称&#xff1a;最长递增的区间长度 时间限制&#xff1a;1000ms 内存限制&#xff1a;256M 题目描述 给一个无序数组&#xff0c;求最长递增的区间长度。如&#xff1a;[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3 &#xff08;注意&#xff1a;测试用例仅做参考&#xff0c;…

Spring web开发之Request 获取三种方式

在开发 Java Web 项目中&#xff0c;我们经常使用 HttpServletRequest 获取请求参数、请求头等信息。在Spring项目&#xff0c;我们通常会使用 Spring 提供的注解获取参数&#xff0c;如 RequestParam、RequestHeader。 不过在某些场景下&#xff0c;我们可能需要从 HttpServl…

初识Docker:(4)Docker基本操作

初识Docker&#xff1a;&#xff08;4&#xff09;Docker基本操作1 镜像操作1.1 镜像名称1.2 镜像操作命令1.3 案例&#xff1a;docker拉取nginx镜像利用docker save将nginx镜像导出磁盘&#xff0c;然后再通过load加载回来1.4 镜像操作总结2 容器操作2.1 案例创建运行一个ngin…

【阅读笔记】《持续交付2.0》中理解分支、发布策略

文章目录1. 前言1.1 分支、发布 管理上解耦2. 主干 (Trunk) 和分支 (Branch)2.1 Trunk 开发 Trunk 发布2.1.1 Trunk 开发 Trunk 发布需要解决&#xff1a;重构的需求2.1.2 Trunk 开发 Trunk 发布需要解决&#xff1a;未开发完成的功能被带入发布版本2.2 Trunk 开发 Branch 发布…

leetcode:6272. 好分区的数目【思维转换(正难则反) + dp定义 + 背包问题 + 选or不选】

目录题目截图题目分析ac code总结题目截图 题目分析 先特判&#xff0c;如果sum(nums) < 2 * k显然不可能成功&#xff01;返回0出现Mod大概率就是dp1000的话提示我们用平方复杂度的dp这种取子序列的问题&#xff0c;本质就是选or不选的问题如果我们只考虑一维dp,dp[i]肯定…

Linux--信号

目录1. 信号概念2. 信号产生前2.1 信号产生的各种方式3. 信号产生中信号保存的方式3.1 阻塞信号3.2 信号屏蔽字4. 信号产生后信号处理的方式4.1 信号集操作函数4.2 sigprocmask函数4.3 sigpending函数4.4 sigaction函数5. 信号是什么时候被处理的1. 信号概念 信号是进程之间事…

golang访问KingbaseES V8R6

概述 本文介绍go语言连接KingbaseES V8R6数据库的步骤 测试环境 操作系统&#xff1a;CentOS 7.2.1511 数据库版本&#xff1a;KINGBASE (KingbaseES) V008R006C007B0012 go版本&#xff1a;go version go1.19.4 linux/amd64 KingbaseES go驱动获取 go连接kingbase数据库需…

MySQL为什么使用B+树为索引结构

目录 1、什么是索引 2、索引的类型 3、为什么要用索引 4、索引的使用场景 5、索引为什么要用B树&#xff0c;为什么不能用二叉树、红黑树、B树&#xff1f; 介绍一款可以帮助理解数据结构的网站&#xff08;很好用&#xff09;&#xff1a;Data Structure Visualization …

hadoop生产调优之Hadoop-Yarn 生产经验(参数调优)

一、常用的调优参数 1&#xff09;调优参数列表 &#xff08;1&#xff09;Resourcemanager 相关 yarn.resourcemanager.scheduler.client.thread-count ResourceManager 处理调度器请求的线程数量 yarn.resourcemanager.scheduler.class 配置调度器&#xff08;2&#xff0…

js中ArrayBuffer和node中Buffer的关系和区别

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。 它是一个字节数组&#xff0c;通常在其他语言中称为“byte array”。你不能直接操作 ArrayBuffer 中的内容&#xff1b;而是要通过类型化数组对象或 DataView 对象来操作&#xff0c;它们会将缓冲区中的数据…

C++、python、VS code插件安装与SSH使用

下载按照VS coda 官网&#xff1a;https://code.visualstudio.com 1.安装相关插件 1.中文插件&#xff08;可选&#xff09; MS-CEINTL.vscode-language-pack-zh-hans 2.C插件&#xff08;必选&#xff09; ms-vscode.cpptools 3.ssh 远程&#xff08;必选&#xff09; ms-vs…

数据结构——快排的三种实现方式

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题什么是快排&#xff1f;如何实现递归单次的排序要如何实现hore 的办法![在这里插入图片描述](https://img-blog.csdnimg.cn/40b2ac63f2424bd1828a45f8509ff116.gif#pic_center)坑位法双指针法总结什么是快排&#xff1f;…

线程池(一)

个人博客地址&#xff1a; http://xiaohe-blog.top/index.php/archives/14/ 文章目录1. 为什么要使用线程池2. Executor3. ThreadPoolExecutor3.1 七个参数3.2 任务队列3.3 拒绝策略4. 创建线程池5. Executors5.1 CachedThreadPool5.2 FixedThreadPool5.3 SingleThreadExecutor…

SAP UI5 应用里一些容器控件的介绍

sap.m.Shell 控件可用作应用程序的根元素。 它可以包含 App 或 SplitApp 控件。 Shell 为整个应用程序提供了一些总体功能&#xff0c;并负责在桌面浏览器平台上进行视觉适配&#xff0c;例如应用程序周围的框架。 sap.m.App: 该 App 继承自 sap.m.NavContainer 并因此提供其导…

VUEElement 学习笔记

1 VUE 1.1 示例 新建test_vue.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>Title</title> </head> <body><div id"app"><input name"…

三、SpringBoot启动流程及自动化配置

一、Springboot启动流程 图一:Springboot项目的启动流程 首先,针对上图中自己不太明确的两个知识点,这里做如下总结: 1.Banner:参考这篇文章:SpringBoot之Banner介绍 - MarkLogZhu - 博客园 (cnblogs.com) ; 2.钩子方…

【Javassist】快速入门系列07 当检测到字段被访问时使用语句块替换访问

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 06 当有构造方法调用时替换方法调用的内容 07 当检测到字段被访问时使用语…

一个最基本的lLinux驱动开发框架和编译驱动方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、编写驱动文件1.相关头文件2.驱动入口 &出口3.申明完整代码二、编译驱动的方式三、编译驱动1. 和内核一起编译&#xff1a;2. 编译成驱动模块&#xff1a…