
C++学习
仅当作笔记使用
好像也没什么大不了
热爱生活,热爱你
展开
-
八股学习Day1
virtual:虚函数是指在基类中声明的函数,在派生类中可以被重写。静态成员函数没有this指针,虚函数的实现是为每一个对象分配一个vptr指针,而vptr是通过this指针调用的,所以不能为virtual;当一个成员函数被调用时,编译器会将该函数的调用对象的地址作为this指针传递给函数。静态成员函数中没有这样的this指针,所以静态成员函数不能操作类中的非静态成员函数.否则编译器会报错.静态成员函数不依赖于任何对象,只能对静态成员变量做修改,不涉及任何其他对象变量的修改,因此不能声明为。原创 2023-06-22 17:40:00 · 671 阅读 · 0 评论 -
面试经验小结
继承中构造和析构顺序如下:先构造父类,再构造子类;先析构子类,再析构父类。C++的编译过程中,将函数名后面的数据类型也加入到了编译阶段。本质原因:程序访问了非法的地址。原创 2023-05-24 21:09:43 · 848 阅读 · 1 评论 -
C++ bit field 位域/位段
位域 “ 或 “ 位段 “(Bit field)为一种,可以把数据以的形式,并允许程序员对此结构的。这种数据结构的一个,当程序需要成千上万个数据单元时,这种方法就显得尤为重要。第二个好处是位段可以很方便的访问一个整数值的部分内容从而可以简化程序源代码。而这种数据结构的缺点在于,位段实现依赖于具体的机器和系统,在不同的平台可能有不同的结果,这导致了位段在本质上是。原创 2022-11-02 21:30:47 · 504 阅读 · 0 评论 -
C++核心编程-类和对象-继承
羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性;当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据?语法:class 子类 : 继承方式 父类1 ,继承方式 父类2。继承中构造和析构顺序如下:先构造父类,再构造子类;草泥马继承自动物的数据继承了两份,其实这份数据只需要一份即可。父类中私有成员属性被编译器隐藏,无法访问,但确实被继承。子类继承父类后,当创建子类对象,也会调用父类的构造函数。多继承可能会引发父类中有成员出现,需要加作用域区分。原创 2022-10-26 18:25:19 · 94 阅读 · 0 评论 -
C++核心编程-类和对象-运算符重载
对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。原创 2022-10-25 21:48:17 · 242 阅读 · 0 评论 -
C++核心编程-类和对象-友元
生活中方有客厅(public),有卧室(private)客厅所有来的客人都可以进去,但是卧室是私有的,也就是说只有你能进去但是可以允许你的好朋友进去在程序里,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元。友元的是让一个函数或者类访问另一个类中私有成员。原创 2022-10-25 21:42:27 · 174 阅读 · 0 评论 -
C++核心编程-duque容器
数组,可以对头端进行插入删除操作duque与vector:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的的插入删除速度比vector快vector访问元素的速度会比deque快,这与两者内部实现有关deque内部工作原理:deque容器的迭代器也是支持随机访问的。原创 2022-10-19 18:33:21 · 529 阅读 · 0 评论 -
C++核心编程-vector容器
vector数据结构和数组很相似,也称为单端数组与普通数组区别:数组是静态空间,vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。原创 2022-10-17 21:30:42 · 243 阅读 · 0 评论 -
C++核心编程-string容器
string是C++风格的字符串,stirng本质是一个类string和char*的区别:char* 是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。特点:string类内部封装了很多成员方法例如:查找find 拷贝copy 删除delete 替换replace 插入insert。原创 2022-10-15 11:26:16 · 177 阅读 · 0 评论 -
C++核心编程-map容器
map与multimap区别:map不允许容器中有重复key值元素;multimap允许重复key值元素。pair中第一个元素为key(键值),第二个元素为value(实值)本质:map、multimap属于关联式容器,底层结构用二叉树实现。所有元素都会根据元素的键值自动排序。简介:map中所有元素都是。利用仿函数,改变排序规则。原创 2022-10-14 20:32:09 · 891 阅读 · 0 评论 -
C++核心编程-set容器
;public:}};//自定义数据类型都会指定排序规则Person p1("刘备",24);Person p2("关羽",21);Person p3("张飞",29);Person p4("孔明",27);it!=s.end();}原创 2022-10-13 19:53:33 · 285 阅读 · 0 评论 -
C++核心编程-类和对象IV-对象模型和this指针、const修饰成员函数
C++核心编程-类和对象IV-对象模型和this指针、const修饰成员函数原创 2022-10-12 21:27:31 · 79 阅读 · 0 评论 -
C++核心编程-类和对象III-深浅拷贝、初始化列表、静态成员、静态成员函数
语法: 构造函数():属性1(值1),属性2(值2)...{}静态成员就是在成员变量和成员函数前加上static。深拷贝:在堆区重新申请空间,进行拷贝操作。类对象作为类成员 称该成员为对象成员。静态成员函数只能访问静态成员变量。浅拷贝:简单的赋值拷贝操作。当其他类对象作为本类成员,所有对象共享同一个函数。原创 2022-10-12 21:19:39 · 168 阅读 · 0 评论 -
C++核心编程-类和对象II-对象初始化和清理
主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用。C++中面向的对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。如果我们不提供构造和析构,编译器会提供,编译器提供的构造函数和析构函数是空实现。:如果用户定义有参构造函数,C++不再提供默认无参构造,但是会提供默认拷贝构造。程序在调用对象时会自动调用构造,无需手动调用,而且只会调用一次。程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次。默认拷贝构造函数,对属性进行值拷贝。原创 2022-10-11 17:17:28 · 131 阅读 · 0 评论 -
C++核心编程-类模板II
1.直接包含.cpp源文件;2.将声明和实现写在同一个文件中,并更改后缀为.hpp hpp是约定的名称,并不是强制。:类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到。(注意深浅拷贝的问题!这里的区别在代码里已经有所体现)、:类模板中成员函数开始的时候是没有创建的。尾插法的实现、下标访问的实现、析构函数。(同样注意深浅拷贝的问题,以及。让编译器知道全局函数的存在。-直接在类内声明友元即可。原创 2022-09-29 20:23:44 · 260 阅读 · 0 评论 -
C++核心编程-类和对象-封装
封装C++认为万事万物皆为对象,对象上有其属性和行为。具有相同性质的对象,我们可以抽象为类。封装 意义:将属性和行为作为一个整体,表现生活中的事物:成员属性、成员变量:成员函数、成员方法。原创 2022-09-28 21:44:14 · 278 阅读 · 0 评论 -
C++核心编程-类模板
typename--表明其后面的符号是一种数据类型,可以用class代替。建立一个通用类,类中成员 数据类型可以不具体制定,用一个虚拟的类型来代替。T--通用的数据类型,名称可以替换,通常为大写字母。3.如果想灵活指定出父类中T的类型,子类也需变为类模板。2.参数模板化 --将对象中的参数变为模板进行传递。3.整个类模板化 --将这个对象类型 模板化进行传递。1.指定传入的类型--直接显示对象的数据类型。2.如果不指定,编译器无法给子类分配内存。:template--声明创建模板。原创 2022-09-28 21:33:47 · 234 阅读 · 0 评论 -
C++核心编程-普通函数与函数模板调用规则
【代码】C++核心编程-普通函数与函数模板调用规则。原创 2022-09-27 20:32:50 · 203 阅读 · 0 评论 -
C++核心编程-普通函数与函数模板的区别
2.函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换。1.普通函数调用可以发生自动类型转换(隐式类型转换)3.如果利用显示指定类型的方式,可以发生隐式类型转换。输出为109,会自动对c进行隐式类型转换。原创 2022-09-27 20:11:23 · 123 阅读 · 0 评论 -
C++核心编程-函数模板的使用
C++另一种编程思想称为泛型编程,主要利用的技术就是模板;C++提供两种模板机制:函数模板和类模板。原创 2022-09-26 20:54:10 · 130 阅读 · 0 评论 -
C++核心编程-函数的默认参数
1.如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值。C++中函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补该位置。2.如果函数声明有默认参数,函数实现就不能有默认参数。函数参数类型不同\个数不同\顺序不同。**函数的返回值不可以作为函数重载的条件**注意事项2:函数重载遇到函数默认参数。如果传入数据则用传入的数据,否则用默认值。注意事项1:引用作为重载条件。:函数名可以相同,提高复用性。如果main函数是这样的。原创 2022-09-26 21:06:51 · 148 阅读 · 0 评论 -
C++核心编程-引用
引用 给参数起别名注意:引用必须;引用一旦初始化,就不可以更改。原创 2022-09-25 15:05:09 · 123 阅读 · 0 评论 -
解决Visual Studio Code运行程序时输出中文成乱码问题
在WIN11系统下,VScode文件里中文没有乱码,但运行输出时出现中文乱码情况,找了很多方法,提到在VScode中改编码方式等方法,都没有用。最后赴星辰大海的文章帮助了我,他是WIN10,亲测WIN11依然有效。3.勾选上Beta版,重启电脑后,能够正常输出中文。1.控制面板->选择更改日期、时间或数字格式。2.选择管理->更改系统区域设置。原创 2022-09-25 14:19:03 · 2611 阅读 · 2 评论 -
C++核心编程-内存分配
的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。该区域的数据在程序结束后由操作系统释放。:注意:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。:由编译器自动分配释放,存放函数的参数值,局部变量等。指针本质也是局部变量,放在栈上,指针保存的数据保存在堆区。:由程序员分配和释放,程序结束时由操作系统回收。:存放函数体的二进制代码,由操作系统进行管理。的,使其只读的原因是防止程序意外的修改指令。不同区域存放的数据,赋予不同的生命周期。堆区开辟的数据,由程序员手动释放,利用。原创 2022-09-24 16:25:23 · 70 阅读 · 0 评论 -
C++基础 结构体
结构体指针 利用->可以通过结构体指针访问结构体属性。结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。结构体数组 作用:将自定义的结构体放入到数组中方便维护。结构体嵌套结构体 结构体中的成员可以是另一个结构体。形参改为指针,可以减少内存空间,而且不会复制新的副本。结构体中const使用场景。通过指针指向结构体变量。原创 2022-09-22 19:58:09 · 210 阅读 · 0 评论 -
C++数组基础与冒泡排序
1.可以统计整个数组在内存中的长度 sizeof(arr)数组中第一个元素的地址为&arr[0]2.可以获取数组在内存中的首地址 arr。1.可以统计整个数组占用的内存空间大小。2.可以获取数组在内存中的首地址。注意:数组名是常量,不可以进行赋值操作。本文仅用作自己笔记记录。原创 2022-09-20 20:40:10 · 155 阅读 · 0 评论 -
C++函数基础
值传递:函数调用时实参将数值传入形参;值传递时,如果形参发生改变,并不会影响实参。返回值类型 函数名 参数列表 函数体语句 return表达式。函数的声明 告诉编译器函数名称及如何调用函数。3.在头文件中写函数的声明。4.在源文件中写函数的定义。2.创建.cpp的源文件。1.创建.h的头文件。原创 2022-09-21 11:09:08 · 128 阅读 · 0 评论 -
C++准备知识
C++中字符型变量只占用一个字节;字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入存储单元。2.const 修饰的变量 const 数据类型 常量 =常量值。sizeof 可以统计数据类型所占内存大小。语法:sizeof(数据类型/变量)存在意义:给变量分配合适的内存空间。2.只能由字母、数字、下划线组成。3.第一个字符必须为字母或下划线。1.#define 宏常量。本文仅用作笔记自己翻看。原创 2022-09-20 20:35:00 · 92 阅读 · 0 评论 -
C++指针基础 空指针与野指针
指针:通过指针间接访问内存 可以通过指针来表示一个地址int a=10p=&a &为取地址符*p=1000 *为解引用符a=1000指针所占的内存空间 在32位操作系统下,指针占4个字节大小;在64位操作系统下,指针占8个字节大小:指针变量指向内存中编号为0的空间用途:初始化指针变量:指针变量指向非法的内存空间在程序中要避免!原创 2022-09-22 19:52:20 · 175 阅读 · 0 评论