C++学习
文章平均质量分 91
C++学习
硕~
我是一只大菜坤。
展开
-
C++:泛型算法与绑定器
文章目录一、泛型算法二、绑定器一、泛型算法使用STL库中提供的泛型算法需要引入:#include <algorithm>泛型算法:template + 迭代器 + 函数对象;用模板实现的,接收的是容器的迭代器,还可以更改运算结果。。特点:1.泛型算法的参数接受的都是迭代器。2.泛型算法的参数还可以接受函数对象。实例1:sortint arr[] = {12, 4, 78...原创 2020-03-17 22:34:28 · 301 阅读 · 0 评论 -
C++:函数对象与函数指针
文章目录一、函数对象与函数指针二、使用实例一、函数对象与函数指针函数对象: 拥有()operator重载函数的对象即函数对象,函数对象类似C语言里面的函数指针,但在C++里为函数对象。问题一:什么是函数对象呢?例如:我们C语言进行函数调用与C++中两个函数调用。 看起来它们好像一模一样,但是C语言中的su...原创 2020-03-17 20:51:52 · 1886 阅读 · 0 评论 -
C++:迭代器iterator
迭代器iterator1.普通的正向迭代器iterator:打印元素时从第一个打到最后一个,既可以读也可以修改。2.常量的正向迭代器const_iterator:只能读而不能写。3.反向迭代器reverse_iterator:打印元素时从最后一个打印到第一个,既可读也可以修改。4.常量的反向迭代器const_reverse_iterator:打印元素时从最后一个打印到第一个,只能读而不能写...原创 2020-03-17 15:17:21 · 489 阅读 · 0 评论 -
C++STL:无序关联容器、有序关联容器
文章目录一、无序关联容器二、有序关联容器一、无序关联容器无序关联容器:二、有序关联容器有序关联容器:原创 2020-03-17 12:26:01 · 2141 阅读 · 0 评论 -
C++STL容器适配器:栈、队列、优先级队列
文章目录一、容器配置栈二、队列三、优先级队列一、容器配置栈二、队列三、优先级队列原创 2020-03-16 20:04:27 · 388 阅读 · 0 评论 -
C++STL顺序容器:vector、deque、list
文章目录一、vector容器1.1使用方式1.2使用实例二、deque容器2.1底层实现2.2使用方式三、list容器四、vector、deque、list对比分析我们经常提到STL,那么STL究竟是什么呢?STL:其英文全称为standard template libaray,即标准模板库。我们根据需要直接实例化这些模板,提高了我们使用的效率。一、vector容器vector:向量容器,...原创 2020-03-16 15:40:42 · 721 阅读 · 0 评论 -
C++:语言级别提供的四种类型转换
文章目录一、const_cast二、static_cast三、reinterpret_cast四、dynamic_cast一、const_castconst_cast:修改类型的const或volatile属性。 使用该运算方法可以返回一个指向非常量的指针(或引用)指向,就可以通过该指针(或引用)对它的数据成员任意改变。注意:1.不考虑const或valatile后类型保持一致才可以进行合...原创 2020-03-15 22:38:43 · 445 阅读 · 0 评论 -
C++继承与多态六:虚基类、虚继承、多重继承中菱形继承问题及解决方案
文章目录一、虚基类和虚继承二、虚基类和虚继承出错情况分析三、菱形继承问题一、虚基类和虚继承虚基类:被虚继承的类,就称为虚基类。virtual作用:1.virtual修饰了成员方法是虚函数。2.可以修饰继承方式,是虚继承。被虚继承的类就称为虚基类。vfptr:一个类有虚函数,这个类生成的对象就有vfptr,指向vftable。vbptr:在派生类中从基类虚继承而来。vftable:第...原创 2020-03-15 20:36:53 · 626 阅读 · 0 评论 -
C++继承与多态五:继承多态与虚函数案例深入分析
我们这里来看几个问题来更加深入了解继承多态与虚函数。题目一:猫狗叫声问题//动物基类 泛指 类-》抽象一个实体的类型class Animal{public: Animal(string name):_name(name){} //纯虚函数 virtual void bark() = 0;protected: string _name;};//动物实体类class C...原创 2020-03-15 14:27:13 · 383 阅读 · 0 评论 -
C++继承与多态四:详解多态应用原理、抽象类
文章目录一、详解多态应用原理二、抽象类及实例一、详解多态应用原理多态:多态字面理解为多种多样的形态。多态分为静多态与动多态。静多态: 编译时期的多态:函数重载、模板(函数模板、类模板)动多态: 运行时期的多态。在继承结构中,基类指针(引用)指向派生类对象,通过该指针(引用)调用同名覆盖方法(虚函数),基类指针指向哪个派生类对象,就会调用哪个派生类对象的同名覆盖方法,成为动多态。多态底层是通...原创 2020-03-14 20:41:43 · 398 阅读 · 0 评论 -
C++继承与多态三:虚函数、静态绑定与动态绑定问题、虚析构函数
文章目录一、虚函数与静态绑定、动态绑定问题二、虚析构函数三、深入动态绑定问题一、虚函数与静态绑定、动态绑定问题虚函数: 在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数。注意:1.一个类里面定义了虚函数,那么编译阶段,编译器需给这个类类型产生一个唯一的vftable虚函数表。虚函数表中主要存储的内容就是RTTI指针和虚函数的地址。当程序运行时,每一张虚函数表都会...原创 2020-03-14 12:56:51 · 465 阅读 · 0 评论 -
C++继承与多态二:重载,隐藏,覆盖、继承中的类型转换
文章目录一、重载、隐藏、覆盖二、隐藏关系三、继承中的类型转换一、重载、隐藏、覆盖继承结构中,名字相同的成员会产生关系,基类派生类里面相关的成员方法我们经常使用三种关系来描述它们,即:重载、隐藏、覆盖关系。重载: 一组函数要重载,必须处在同一个作用域当中;而且函数名字相同,参数列表不同。重载有很多例子,这里就不提了。隐藏(作用域的隐藏): 在继承结构当中,派生类的同名成员,把基类的同盟成员给...原创 2020-03-13 21:30:50 · 299 阅读 · 0 评论 -
C++继承与多态一:继承的本质和原理、访问限定表、派生类的构造过程
文章目录一、继承的本质和原理二、访问限定表三、派生类的构造过程一、继承的本质和原理继承的本质: a kind of1.代码的复用。我们先来瞧一瞧:假设我们现在有一个class Aclass A{public: int ma;protected: int mb;private: int mc;};还有一个class B,classB中也有ma,mb,mc;class...原创 2020-03-13 20:04:07 · 296 阅读 · 0 评论 -
C++:对象池的实现
对象池的实现对象池:在一部分内存空间(池子)中事先实例化好固定数量的对象,当需要使用池中的对象时,首先判断该池中是否有闲置(暂未使用)的对象,如果有,则取出使用,如果没有,则在池中创建该对象。当一个对象不再被使用时,其应该将其放回对象池,以便后来的程序使用。我们来看实例了解一下为什么需要对象池呢?我们先来看一下这样一个例子://Author:Mr.Rain#include <ios...原创 2020-03-13 12:41:59 · 1565 阅读 · 0 评论 -
C++:剖析new与delete实现原理
文章目录一、二、一、之前简单写了一篇关于new与delete使用文章:可以先看看这篇文章再回头来看。C++:new与delete简单使用二、原创 2020-03-12 22:11:08 · 963 阅读 · 0 评论 -
C++迭代器二:详解迭代器失效的底层核心原理
文章目录一、迭代器失效问题二、如何解决迭代器失效问题三、迭代器失效底层原理一、迭代器失效问题迭代器的失效问题:对容器的操作影响了元素的存放位置,称为迭代器失效。失效情况:1.当容器调用erase()方法后,当前位置到容器末尾元素的所有迭代器全部失效。2.当容器调用insert()方法后,当前位置到容器末尾元素的所有迭代器全部失效。3.如果容器扩容,在其他地方重新又开辟了一块内存。原来容...原创 2020-03-12 11:43:21 · 3824 阅读 · 1 评论 -
C++迭代器一:string字符串对象的迭代器iterator实现、实现vector容器的迭代器
文章目录一、string字符串对象的迭代器iterator实现二、实现vector容器的迭代器一、string字符串对象的迭代器iterator实现我们先来看这个例子:使用库中的string,那么string的对象str1叫容器吗?string str1 = "hello world!";//str1叫容器吗?叫容器,其底层放了一组char类型的字符,也是容器。若想用指针遍历其底层字符...原创 2020-03-11 19:50:14 · 10598 阅读 · 0 评论 -
C++运算符重载二:模拟实现string类
模拟实现string类:我们使用C语言的string时,有一些不方便的地方:1.定义数组的时候大小必须固定。2.字符串进行比较大小,连接的时候必须调用相应的字符串操作函数。3.还必须考虑内存是否够用,操作起来比较麻烦。而我们C++提供了string类型,操作起来比较简单,这些操作都可以通过string来使用:string str1;//默认构造string str2 = "aaa";...原创 2020-03-11 16:09:37 · 506 阅读 · 0 评论 -
C++运算符重载一:运算符重载、复数类CComplex、输入输出运算符重载
文章目录一、运算符重载二、复数类CComplex三、输出运算符重载一、运算符重载运算符重载: 使对象的运算运算表现得和编译器内置类型一样,使同一个运算符可以有不同的功能。即定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。运算符重载实质上是函数的重载,重载运算符的函数一般格式如下:函数类型 operator 运算符名称(形参表){对运算符的重...原创 2020-03-11 12:05:55 · 4382 阅读 · 0 评论 -
C++模板三:STL向量容器vector简单实现、容器空间适配器allocator简单实现
文章目录一、STL向量容器vector简单实现二、容器空间适配器allocator简单实现一、STL向量容器vector简单实现首先,我们了解一下什么是容器呢?容器:在C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的指针,这种对象类型就叫做容器。 简单理解,即容器就是保存其他对象的对象。而且,这种“对象”还有处理“其他对象”的方法。 我们平常喝水的的...原创 2020-03-10 16:59:29 · 671 阅读 · 0 评论 -
C++模板二:类模板与模板类
类模板类模板: 是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。类模板的实例化就是模板类。定义类模板的一般形式是:template <类型名 参数名1,类型名 参数名2,…>class 类名{类声明体};类模板的选择性实例...原创 2020-03-10 12:43:37 · 324 阅读 · 0 评论 -
C++模板一:函数模板与模板函数
文章目录一、模板的意义二、函数模板与模板函数三、模板特例化四、模板函数、模板特例化、非模板函数的重载关系一、模板的意义模板的意义:一种特殊的函数可用不同类型进行调用,看起来和普通函数很相似,区别是类型可被参数化。注意:1.只用写一套代码实现逻辑,实例化的类型调用时可指定,编译器会从原模版实例化出来。2.函数模板不进行编译,模板函数才是要被编译器所编译的。3.一般来说,模板代码不能在一个...原创 2020-03-09 23:09:27 · 1385 阅读 · 0 评论 -
C++类与对象四:嵌套类型设计的构造函数实现、this指针和成员方法之间的关系、指向类型成员的指针使用实例
文章目录一、嵌套类型设计的构造函数实现二、this指针和成员方法之间的关系三、指向类型成员的指针一、嵌套类型设计的构造函数实现什么是构造函数的初始化列表,它有什么功能呢?我们来看这个例子:二、this指针和成员方法之间的关系三、指向类型成员的指针...原创 2020-03-09 14:24:54 · 1133 阅读 · 0 评论 -
C++类与对象三:String类与循环队列的实现
文章目录一、string类简单实现二、循环队列实现一、string类简单实现String类简单实现:class String{public: String(const char *str = nullptr)//构造函数 { if (str != nullptr) { m_data = new char[strlen(str) + 1]; strcpy(m_dat...原创 2020-03-08 22:18:19 · 303 阅读 · 0 评论 -
C++类与对象二:构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、深拷贝与浅拷贝问题
文章目录一、构造与析构函数1.1为什么需要构造与析构函数1.2构造函数与析构函数二、深拷贝与浅拷贝分析三、String与队列代码实现一、构造与析构函数1.1为什么需要构造与析构函数为什么需要构造与析构函数?我们先来用OPP思想实现一个顺序栈:#include <iostream>using namespace std;class SeqStack//顺序栈{publ...原创 2020-03-07 20:03:25 · 610 阅读 · 2 评论 -
C++类与对象一:OOP思想、类和对象、this指针
文章目录一、OOP思想二、类和对象:模拟一个商品类三、this指针一、OOP思想什么是OOP思想? 面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系...原创 2020-03-07 18:59:49 · 321 阅读 · 0 评论 -
C++:new与delete简单使用
文章目录一、malloc与free回顾二、new与delete简单使用三、new与delete、delete与free对比一、malloc与free回顾C语言中的malloc与free:malloc与free称做C的库函数。malloc与free开辟内存:int *p = (int*)malloc(sizeof(int));if (p == nullptr){ return -1;...原创 2020-03-07 09:38:45 · 372 阅读 · 0 评论 -
C++:const在C与C++中区别、const与指针结合应用、C++引用、一级指针const引用结合使用
文章目录一、const在C与C++中区别二、const与一级指针结合应用2.1const与一级指针结合分析2.2const和指针的类型转换公式三、const与二级指针结合应用四、C++左值引用与右值引用五、const、指针、引用结合使用一、const在C与C++中区别1.我们最简单的cosnt理解为:const修饰的变量不能够再作为左值,可以初始化,初始化完了之后值不能被修改。什么是cons...原创 2020-03-06 21:19:15 · 373 阅读 · 1 评论 -
C++:形参带默认值的函数、内联函数、函数重载
文章目录一、形参带默认值的函数二、内联函数三、函数重载一、形参带默认值的函数形参带默认值的函数:1.定义时给默认值的时候,从右向左给。2.调用效率:若两个函数都传入变量,会提高效率,形参带默认值的函数会少一次mov指令;若传入数值,则效率不变。3.定义时可以给形参默认值,函数声明时也可以给形参默认值。4.形参给默认值时,不管是定义出给还是声明处给,形参默认值只能出现一次。 ...原创 2020-03-06 14:56:15 · 1302 阅读 · 0 评论 -
C++:Linux下编译链接原理底层演示分析
Linux下编译链接原理演示:我们一个可执行文件的产生其原理大致如图所示:若想更加透彻了解编译链接原理,详情可参考该博客:C++:一个C/C++源文件从文本变成可执行文件的过程我们在这里是为了通过演示Linux下底层具体实现,更好的了解编译链接基本原理。我们这里有两个文件,main.cpp与sum.cpp;main.cpp:sum.cpp:这里有几个问题:符号表什么时候分配...原创 2020-03-05 21:51:36 · 470 阅读 · 0 评论 -
C++:虚拟地址空间、函数调用栈问题
文章目录一、进程的虚拟地址空间内存划分和布局二、函数调用栈一、进程的虚拟地址空间内存划分和布局 任何编程语言最终产生的结果为:指令 + 数据。 我们写完代码在编译链接产生可执行文件后,可执行文件在磁盘上,运行时需要由磁盘加载到内存当中,那加载了哪些东西呢?它们是如何存放的?我们平常写代码时,数据和指令再运行时放在...原创 2020-03-04 23:34:33 · 659 阅读 · 0 评论 -
C++:x&(x-1)的作用、sizeof计算多种情况详解、宏误区
文章目录一、x &(x-1)作用实例1: 统计1的个数实例2:判断一个数(x)是否是2的n次方二、宏误区一、x &(x-1)作用x &(x-1)作用:将二进制的最后一个1变为0.通过下图观察,我们可以发现规律:实例1: 统计1的个数1.求下面函数的返回值int func(int x) { int countx = 0; while(x) ...原创 2020-02-12 13:35:44 · 2020 阅读 · 0 评论 -
C++:一个C/C++源文件从文本变成可执行文件的过程
文章目录一、导语二、预处理三、编译四、汇编五、链接一、导语假如有一个main.c 源文件,如何让它从源文件变成可执行文件呢?其大致经过4个步骤:分别是预处理,编译,汇编,和链接。1).预处理,产生.ii文件2).编译,产生汇编文件(.s文件)3).汇编,产生目标文件(.o或.obj文件)4).链接,产生可执行文件(.out或.exe文件)大致过程如图所示:下面我们详细来说说每一...原创 2020-02-05 12:51:54 · 3272 阅读 · 0 评论 -
C++:运算符重载:以String类为例
运算符重载 运算符重载:即定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。 运算符重载实质上是函数的重载重载运算符的函数一般格式如下: 函数类型 operator 运算符名称(形参表)...原创 2019-10-26 00:13:03 · 1821 阅读 · 0 评论 -
C++:类与对象
一.面向对象思想及类面向对象思想面向对象:面向对象程序设计(OOP)是一种程序设计的泛型,同时也是一种程序开发的方法,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。学习这些的目的是为了模拟现实。类类:类是对具有相同属性和行为的一组对象的抽象与统一描述。属性以数据表示,行为通过函数实现。类是用户自定义的数据类型。类是对现实世界在计算机中的反映,它将...原创 2019-10-24 22:24:31 · 161 阅读 · 0 评论 -
C++:函数堆栈调用
函数堆栈调用:栈:所有函数的活动空间栈帧:一个函数的活动空间汇编:Linux里面的汇编:AT&Tint a = 10;操作为:mov 0a ,dword ptr [a];特点:除操作码,从左往右看Windows inter x86下汇编:操作为:mov dword ptr[a],0a;特点:除操作码,从右往左看一些常用的寄存器:eax,ebx,ecx,edx//存储...原创 2019-09-17 20:27:55 · 147 阅读 · 0 评论 -
C++:编译链接运行原理
1.操作系统的位数32/64:指的是算术逻辑单位的宽度,即计算机一次能处理的最大指令长度2.模式内存:一般为4G,即2^32(1)实模式(最开始使用,但不安全,80386以前使用):所有的访问访问真实的地址风险:因为内存为连续的,若拿到A的地址,通过指针加偏移偏移到B的地址,修改B的数据,程序被恶意破坏。(2)保护模式(X86体系后使用)先将A映射到虚拟地址空间上,再由虚拟地址空间...原创 2019-07-21 15:30:20 · 232 阅读 · 0 评论