c与c++
文章平均质量分 59
boat_7
世人皆被命运安排,而我安排命运
展开
-
C++运算符重载
C++运算符重载重载的概念C++ 中的运算符重载可重载运算符/不可重载运算符一元运算符重载二元运算符重载关系运算符重载输入/输出运算符重载总结重载的概念C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符转载 2021-08-01 22:19:12 · 88 阅读 · 0 评论 -
C++多态的实现原理
C++多态的实现原理虚函数和多态多态的表现形式多态的作用多态的一个例子构造函数和析构函数中存在多态吗?多态的实现原理虚函数表虚析构函数纯虚函数和抽象类虚函数和多态虚函数:在类的定义中,前面有 virtual 关键字的成员函数称为虚函数virtual 关键字只用在类定义里的函数声明中,写函数体时不用比如:class Base { virtual int Fun() ; // 虚函数};int Base::Fun() // virtual 字段不用在函数体时定义{ }多态的原创 2021-07-31 21:23:12 · 809 阅读 · 2 评论 -
虚继承场景下的C++对象模型
C++对象模型菱形继承虚继承的对象模型菱形继承我们先来回忆一下C++中的菱形继承菱形继承的概念:两个派生类继承同一个基类又有某个类同时继承两个派生类这种继承被称为菱形继承,或钻石继承菱形继承的问题:羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性草泥马继承自动物的数据继承了两份,其实我们只需要一份就可以了解决方法:当菱形继承,两个父类拥有相同的数据,需要加以作用域区分利用虚继承,解决菱形继承的问题虚继承的对象模型普通继承是子类拷贝并修改原创 2021-07-30 15:58:36 · 120 阅读 · 0 评论 -
普通继承环境下的C++对象模型
C++对象模型对象模型基础普通继承场景下的对象模型对象模型基础C++在C的基础上引入了面向对象的程序设计思想,类的封装、继承和多态使得C++功能更加强大,C++的类包含数据成员和成员函数:数据成员: 静态数据成员,非静态数据成员成员函数: 非静态成员函数、静态函数、虚函数C++对象模型研究C++类的数据成员和成员函数在内存中如何布局的问题:例如:class Base{public: int member; // 非静态数据成员 static int smember; /原创 2021-07-29 21:31:59 · 118 阅读 · 0 评论 -
深入理解C/C++中的指针
深入理解C/C++中的指针计算机的内存模型指针与指针常量指针变量和指针常量指针变量和数组函数指针C++中的引用传值还是传引用C++中的new关键词计算机的内存模型CPU是计算机的核心部件,要想让一个CPU工作,就必须向它提供指令和数据,指令和数据在存储器中存放,也就是我们平时说的内存。内存分为:物理内存和虚拟内存,物理内存对应着计算机中的内存条,虚拟内存是操作系统内存管理系统假想出来的,由于这些不是我们本文的重点,我们就不做区分。在不考虑cpu缓存的情况下,计算机运行程序本质上是对内存中的数据的操作原创 2021-07-20 17:28:18 · 546 阅读 · 6 评论 -
C++常用集合算法
常用集合算法set_intersectionset_unionset_difference学习目标:掌握常用的集合算法算法简介:set_intersection//求两个容器的交集set_union//求两个容器的并集set_difference//求两个容器的差集set_intersection功能描述:求两个容器的交集#include <iostream>using namespace std;#include <vector>#includ原创 2021-07-09 17:00:08 · 211 阅读 · 0 评论 -
C++常用算术生成算法
常用算术生成算法accumulatefill学习目标:掌握常用的算术生成算法注意:算术生成算法属于小型算法,使用时包括的头文件为:#include<numeric>算法简历:accumulate//计算容器元素累计总和fill//向容器中添加元素accumulate功能描述:计算区间内,容器元素累计总和#include <iostream>using namespace std;#include <vector>#include原创 2021-07-09 15:58:12 · 101 阅读 · 0 评论 -
C++常用拷贝和替换算法
C++常用拷贝和替换算法copyreplacereplace_ifswap学习目标:掌握常用的拷贝和替换算法算法简介:copy//容器内指定的元素拷贝到另一容器中replace//将容器内指定范围的旧元素修改为新元素repalce_if//容器内指定范围满足条件的元素替换成新元素swap//互换两个容器的元素copy功能描述:容器内指定范围的元素拷贝到另一个容器中#include <iostream>using namespace std;#include原创 2021-07-09 09:08:52 · 143 阅读 · 2 评论 -
C++常用排序算法
C++常用排序算法sort学习目标:掌握常用的排序算法算法简介:sort//对容器内元素进行排序random_shuffle//洗牌 指定范围内的元素随机调整次序merge//容器元素合并,并存储到另一个容器中reserve//反转指定范围的元素sort功能描述:...原创 2021-07-09 07:51:41 · 114 阅读 · 3 评论 -
C++常用查找算法
常用查找算法findfind_ifadjacent_findbinary_searchcountcount_if算法简介:find //查找元素find_if//按条件查找元素adjacent_find//查找相邻重复元素binary_search//二分查找法count//统计元素个数count_if//按条件统计元素个数find功能描述:查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()#include <iostream>using na原创 2021-07-08 23:02:00 · 418 阅读 · 0 评论 -
C++常用遍历算法
C++常用遍历算法for_eachtransform学习目标:掌握常用的变量算法算法简介:for_each//遍历算法transform//搬运容器到另一个容器for_each#include <iostream>using namespace std;//常用遍历算法#include <vector>#include<algorithm>//普通函数void print01(int val){ cout << val &原创 2021-07-08 21:09:57 · 199 阅读 · 0 评论 -
C++内建函数对象
内建函数对象内建函数对象意义算数仿函数关系仿函数逻辑仿函数内建函数对象意义概念:STL内建了一些函数对象分类:算法仿函数关系仿函数逻辑仿函数用法:这些仿函数所产生的对象,用法和一般函数完全相同使用内建函数对象,需要引入头文件#include <functional>算数仿函数#include <iostream>using namespace std;#include <functional>//内建仿函数 算法仿函数//neg原创 2021-07-08 00:00:05 · 77 阅读 · 2 评论 -
C++谓词
谓词一元谓词二元谓词概念:返回bool类型的仿函数称为谓词如果operator()接受一个参数,那么叫做一元谓词如果poerator()接受两个参数,那么叫做二元谓词一元谓词#include <iostream>using namespace std;#include <string>#include<vector>#include<algorithm>//仿函数 返回值类型是bool数据类型,称为谓词//一元谓词class gr原创 2021-07-07 00:28:03 · 247 阅读 · 0 评论 -
C++STL-函数对象
函数对象函数对象概念函数对象使用函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数函数对象使用特点:函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值。函数对象超出普通函数的概念,函数对象可以有自己的状态函数对象可以作为参数传递#include <iostream>using namespace std;#include <st原创 2021-07-06 23:48:32 · 43 阅读 · 0 评论 -
C++map/multimap容器
map/multimap容器map基本概念map的构造和赋值map大小和交换map插入和删除map查找和统计map容器排序map基本概念简介:map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用二叉树实现优点:可以根据key值快速找到value值map和multimap区别:map不允许容器中重复key值元素multima原创 2021-07-06 00:46:36 · 78 阅读 · 0 评论 -
C++set/multiset容器
set/multiset容器set基本概念set大小和交换set插入和删除set查找和统计set和multiset区别pair对组创建set容器排序set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素#include <iostream>using namespace std;#include <原创 2021-07-05 01:25:44 · 123 阅读 · 0 评论 -
C++list容器
list容器list基本概念list构造函数list赋值和交换list大小操作list插入和删除list数据存取list反转和排序list基本概念功能:将数据进行链式存储链表是一种物理存储单元上非连续的内存结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。STL中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器原创 2021-07-04 05:59:02 · 142 阅读 · 3 评论 -
C++queue容器
queue容器queue基本概念queue常用接口queue基本概念概念:queue是一种先进先出的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为:入队队列中出数据称为:出队queue常用接口功能描述:栈容器常用的对外接口#include <iostream>using namespace std;#include<queue>#include <str原创 2021-07-04 00:15:49 · 57 阅读 · 0 评论 -
C++stack容器
stack容器stack容器基本概念stack常用接口stack容器基本概念概念:stack是一种先进后出的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为:入栈栈中弹出数据称为:出栈stack常用接口功能描述:栈容器常用的对外接口#include <iostream>using namespace std;#include <stack>//栈stack容器void test01(){ //特点:符原创 2021-07-03 23:45:25 · 45 阅读 · 0 评论 -
C++deque容器
deque容器deque容器基本概念deque构造函数deque赋值操作deque大小操作deque插入和删除deque数据存取deque排序deque容器基本概念功能:双端数组,可以对头端进行插入删除操作deque和vector区别:vector对于头部的插入删除效率很低,数据量越大,效率越低deque相对而言,对头部的插入删除速度会比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部实现工作原理:deque内部有个中控器,维护每段缓冲原创 2021-07-03 01:49:40 · 83 阅读 · 1 评论 -
C++vector容器
vector容器vector基本概念vector构造函数vector赋值操作vector容量和大小vector插入和删除vector数据存储vector互换容器vector预留空间vector基本概念功能:vector数据结构和数组非常相似,它被称为单端数组vector和普通数组的区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找到更大的内存空间,然后将原数据拷贝新空间,释放新空间。vector容器的迭代器是支持随机访问的迭代原创 2021-07-02 01:35:07 · 65 阅读 · 1 评论 -
C++string容器
string容器string基本概念string构造函数string赋值操作string字符串拼接string查找和替换操作string字符串比较string字符存取string插入和删除string子串string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char*区别:char*是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。特点:string类内部封装了很多成员方法例如:查找fi原创 2021-07-01 01:39:56 · 214 阅读 · 2 评论 -
STL初识笔记
STL初识STL的诞生STL基本概念STL六大组件STL中容器,算法,迭代器容器算法迭代器Vector存放内置数据类型vector存放自定义数据类型Vector容器嵌套容器STL的诞生长久以来,软件界一直希望建立一种重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提高大多数情况下,数据结构和算法都未有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STLSTL基本概念STL(Standard Template Library,标准模板库)STL从原创 2021-06-29 23:16:25 · 88 阅读 · 2 评论 -
C++类模板笔记
C++类模板类模板语法类模板和函数模板的区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件编写类模板与友元类模板语法类模板作用:建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表。语法:template<typename T>类#include <iostream>using namespace std;#include <string>//类模板template<clas原创 2021-06-29 02:09:38 · 78 阅读 · 0 评论 -
C++函数模板笔记
C++模板模板的概念函数模板函数模板语法函数模板注意事项普通函数和函数模板的区别普通函数与函数模板的调用规则模板的局限性模板的概念模板就是建立通用的模具,大大提高复用性。模板的特点:模板不可以直接使用,它只是一个框架。模板的通用并不是万能的。函数模板C++另一种编程思想称为泛型编程,主要利用的技术就是模板。C++提供两种模板机制:函数模板和类模板。函数模板语法函数模板作用:建立一个通用的函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。语法:templ原创 2021-06-28 01:13:44 · 46 阅读 · 0 评论 -
文件操作笔记
文件操作文本文件写文件读文件程序运行时产生的数据都属于临时数据,程序一旦运行结束会被释放通过文件可以将数据持久化c++中将文件操作需要包含头文件<fstream>文件类型分为两种1.文本文件-文本以文本的ASCII码形式存储在计算机中2.二进制文件-文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们操作文件的三大类:1.ofstream:写操作2.ifstream:读文件3.fstream:读写文件文本文件写文件写文件步骤如下:1.包含头文件#inclu原创 2020-12-15 17:52:02 · 88 阅读 · 1 评论 -
虚析构和纯虚析构笔记
虚析构和纯虚析构多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码解决方法:将父类中的析构函数改为虚析构或者纯虚析构虚析构和纯虚析构共性:1.可以解决父类指针释放子类对象2.都需要有具体的函数实现虚析构和纯虚析构区别:如果是纯虚析构,该类属于抽象类,无法实例化对象...原创 2020-12-15 16:20:20 · 111 阅读 · 0 评论 -
多态案例二-制作饮品笔记
多态案例二-制作饮品案例描述:制作饮品的大致流程为:原创 2020-12-13 21:04:44 · 245 阅读 · 0 评论 -
纯虚函数和抽象类笔记
纯虚函数和抽象类在多态中,通常父类中虚函数的实现是毫无意义的,主要通过调用子类重写的内容。因此可以将虚函数改为纯虚函数。纯虚函数语法:virtual 返回值类型 函数名(参数列表)=0;当类中有了纯虚函数,这个类也称为抽象函数抽象函数特点:1.无法实例化对象2.子类必须重写抽象类的纯虚函数,否则也属于抽象类#include <iostream>using namespace std;#include <string>//纯虚函数和抽象类class Base{原创 2020-12-13 20:13:09 · 123 阅读 · 0 评论 -
多态案例-计算器类笔记
多态案例-计算器类普通实现多态实现案列描述:分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类多态的优点:1.代码组织结构清晰2.可读性强3.利于前期和后期的扩展维护普通实现#include <iostream>using namespace std;#include <string>//分别利用普通写法和多态技术实现计算器//普通写法class Calculator{public: int getResult(string oper)原创 2020-12-12 14:16:38 · 136 阅读 · 0 评论 -
多态笔记
多态多态的基本概念多态的基本概念多态分为两类1.静态多态:函数重载和运算符重载属于静态多态,复用函数名2.动态多态:派生类和虚函数实现运行时多态静态多态和动态多态区别1.静态多态的函数地址早绑定-编译阶段确定函数地址2.动态多态的函数地址晚绑定-运行阶段确定函数地址...原创 2020-12-12 13:40:19 · 61 阅读 · 0 评论 -
菱形继承笔记
菱形继承菱形继承概念:两个派生继承同一个基类又有某个类同时继承者两个派生类这种继承被称为菱形继承,或者砖石继承菱形继承问题:#include <iostream>using namespace std;//动物类class Animal{public: int m_Age;};//利用虚继承可以解决菱形继承的问题//继承之前 加上关键字virtual 变为虚继承//Animal类称为虚基类//羊类class Sheep:virtual public Ani原创 2020-12-07 11:08:32 · 89 阅读 · 0 评论 -
多继承语法笔记
多继承语法c++允许一个类继承多个类语法:class 子类:继承方式 父类1,继承方式 父类2…多继承可能会引发类中有同名成员出现,需要加作用域区分c++实际开发中不建议用多继承#include <iostream>using namespace std;//多继承语法class Base1{public: Base1() { m_A = 100; } int m_A;};class Base2{public: Base2() { m_A= 200原创 2020-12-07 10:31:29 · 114 阅读 · 0 评论 -
继承笔记
继承继承的基本语法普通的实现继承实现页面在编程过程中,定义这些类时,下级别的成员除了拥有上级别的共性,还有自己的特性这个时候我们就可以考虑利用继承的技术,减少重复代码继承的基本语法普通的实现#include <iostream>#include <string>using namespace std;//普通的实现页面//java页面class Java{public: void header() { cout << "首页,公开课,登陆原创 2020-12-06 20:51:08 · 112 阅读 · 0 评论 -
函数调用运算符笔记
函数调用运算符1.函数调用运算符()也可以发生重载2.由于重载后使用的方式非常像函数的调用,因此称为仿函数3.仿函数没有固定写法,非常灵活#include <iostream>#include <string>using namespace std;//函数调用运算符重载//打印输出类class MyPrint{public: //重载函数调用运算符 void operator()(string test) { cout << test原创 2020-12-01 21:06:25 · 267 阅读 · 0 评论 -
关系运算符重载笔记
关系运算符重载作用:重载关系运算符,可以让两个自定义类型对象进行对比操作#include <iostream>#include <string>using namespace std;//关系运算符重载class Person{public: Person(string name, int age) { m_Name = name; m_Age = age; } //重载==号 bool operator==(Person& p) {原创 2020-12-01 20:45:21 · 103 阅读 · 0 评论 -
赋值运算符重载
赋值运算符重载c++编译器至少给一个类增添了4个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝4.赋值运算符operator=,对属性进行值拷贝如果类中数据指向堆区,做赋值操作时也会出现深拷贝问题#include <iostream>#include <string>using namespace std;//赋值运算符重载class Person{public: Person(int a原创 2020-12-01 19:51:34 · 115 阅读 · 0 评论 -
运算符重载笔记1
运算符重载加法运算符重载左移运算符重载递增运算符重载运算符重载的概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型加法运算符重载作用:实现两个自定义数据类型相加的运算#include <iostream>#include <string>using namespace std;//加号运算符重载class Person{public: ////1.成员函数重载+号 //Person operator+(Person& p) //原创 2020-11-30 20:45:23 · 67 阅读 · 0 评论 -
友元笔记
友元在程序中,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的是让一个函数或者类访问另一个类中私有成员原创 2020-11-30 11:40:20 · 131 阅读 · 0 评论 -
const修饰成员函数笔记
const修饰成员函数示例常函数:1.成员函数后加const后我们称为这个函数为常函数2.常函数内不可以修改成员函数3.成员属性声明时加关键词mutable后,在常函数中依然可以修改常对象:1.声明对象前加const称该对象为常对象2.常对象只能调用常函数示例#include <iostream>using namespace std;//常函数class Person{public: //this指针的本质 是指针常量 指针的指向是不可以修改的 //const原创 2020-11-26 12:03:06 · 75 阅读 · 0 评论