![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
post_joke
这个作者很懒,什么都没留下…
展开
-
构造函数&析构函数&拷贝构造函数&
构造函数:初始化对象的内存空间析构函数:释放对象所占资源1、this指针:指向的是对象的空间地址2、构造函数、析构函数的顺序 先构造的后析构,后构造的先析构3、构造函数、析构函数能不能重载 构造函数可以重载 析构函数不可以重载4、构造函数与析构函数能否自己调用 构造函数不可以自己调用 析构函数可以自己调用,但...原创 2019-01-19 17:50:13 · 234 阅读 · 0 评论 -
类中的几个默认函数及其特点
1、构造函数特点:初始化对象所占的空间,可以重载,不依赖对象调用2、析构函数特点:释放对象所占的内存资源,不可以重载,依赖对象调用3、拷贝构造函数拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程 在c++中,下面三种对象需要调用拷贝构造函数(1)...原创 2019-09-12 09:04:10 · 223 阅读 · 0 评论 -
浅拷贝、深拷贝和写时拷贝
浅拷贝:指对象在复制时,只对对象的数据成员进行简单地赋值,而不复制对象本身,新旧对象还是共享同一块内存即只是增加了一个指针指向已存在的内存地址。因为共享同一份资源,当一个对象将这份资源释放掉,而此时另一个对象并不知道该资源已经被释放,当再次进行资源释放时,就会发生崩溃。深拷贝:是增加了一个指针并且申请了一个新的内存,这个新增加的指针指向新的内存,新对象和旧对象不共享内存,修改新对象不会影响到旧...原创 2019-09-12 09:02:08 · 160 阅读 · 0 评论 -
面向对象思想及封装,继承,多态
面向对象思想最重要的有五点,类,对象,还有面向对象的三大特征:继承,多态类是具备某些共同特征实体的集合,是一种抽象的数据类型,是对具有相同特征实体的集合,包括事物的状态信息(成员变量)和行为信息(成员方法),用成员变量描述人的基本属性比如:身高,年龄,姓名等等,用成员方法描述人的行为特征:比如吃饭,睡觉等等。对象就是真实世界的实体,实体与对象一一对应,也就是现实世界中的每一个实体都有一...原创 2019-08-20 15:33:00 · 234 阅读 · 0 评论 -
inline函数的特点,与宏,普通函数,static修饰的函数的区别?
inline函数发生在编译阶段inline函数的注意事项:1)inline一般写在头文件中2)inline只在release版本生效3)inline只是给编译器的一个建议(递归,循环,switch会被处理成inline)4)inline是基于实现的,不是基于声明的inline缺点代码膨胀为代价 空间换时间1)开展的开销>执行的开销 设为inline...原创 2019-08-19 11:05:10 · 253 阅读 · 0 评论 -
函数重载(重定义),C++函数符号的生成规则?
函数重载就是用一个函数名定义不同的函数,当函数名和不同的参数搭配是函数的含义不同.重载的三要素:1、同名2、不同参3、同作用域比如:using namespace std;int Sum(int a,int b) //Sum@@YAHHH@Z{return a+b;}double Sum(double x,double y) //Sum@@YANNN@Z...原创 2019-08-18 17:22:17 · 359 阅读 · 0 评论 -
指针和引用的区别?
指针是一个变量,存储的的是一个地址,指向内存的一个存储单元引用就是变量的一个别名而已,跟原来的变量实质上是一个东西。比如:int *p;int a=10;p=&a;则表示定义了一个整型变量a和一个指针变量p,该指针变量指向a的存储的单元,也就是p的值是a地址。int a=10;int &b=a;这两个代码表示定义了一个整型变量a和一个整型变量引用...原创 2019-08-18 17:18:58 · 83 阅读 · 0 评论 -
栈和堆的区别
1、空间分配堆:由程序员自己分配和释放(malloc/free、new/delete),若程序员不释放,程序结束时可能由操作系统回收栈:由系统分配和释放,存放函数的参数值,局部变量等2、系统响应不同堆:遍历空闲地址链表,找到符合要求就删除该地址分配给程序,内存的首地址记录分配的大小,多余的内存回收栈:只要剩余空间大于申请内存,系统就会退出,否则会栈溢出。3、申请大小的限制...原创 2019-07-23 15:47:19 · 75 阅读 · 0 评论 -
C/C++关系
在c++程序中调用被c编译后的函数,为什么要加exten “c”主要是因为c++语言支持函数重载,而c语言不支持函数重载,函数被c++编译后在库中的名字与c语言不同。我们假设一个函数的原型为 void Sum(int a,int b),该函数在c编译器编译后在库中的名字为_Sum,而c++编译器则会产生像_foo_int_int之类的名字c++提供了c连接交换指定符exten “c”...原创 2019-07-30 16:11:51 · 301 阅读 · 0 评论 -
虚拟地址空间布局
在多任务系统中,每个进程都运行在自己的虚拟地址空间上,32为模式下它是一个4G的内存地址块,在Linux系统下主要分为1G内核空间和3G用户空间,而在Windows系统下,内核空间和用户空间的划分比例为2:2.在Linux系统下虚拟地址空间布局如下图所示:位于虚拟地址空间最低部分为保留区,未赋予物理地址.text 为代码段用来存放程序执行代码.data段称为数据段,用来存放程序...原创 2019-07-17 20:18:23 · 442 阅读 · 0 评论 -
编译链接运行原理
一个程序能够成功运行主要有四个步骤:1.预编译 2.编译 3.汇编 4.链接1.预编译对c程序而言,它的预编译扩展名为.i,对c++程序而言,预编译之后的扩展名则为.ii预编译主要是处理源代码中以“#”开头的预编译指令,主要包括下面几方面:(1)将所有的#define删除,并展开宏定义;(2)处理所有的条件预编译指令,比如#if,#endif等;(3)递归展开#includ...原创 2019-07-17 19:24:27 · 107 阅读 · 0 评论 -
malloc和new的区别
1、malloc开辟的内存在堆上 new不一定(new开辟的内存区域称为自由存储区域) malloc只负责开辟内存,没有初始化功能,需要用户自己初始化;new不但开辟内存还可以进行初始化,比如new int(10)表示在堆上开辟了一个4字节int整形内存,初始化为10;new int[10]()表示在堆上开辟了一个包含10个整形元素的数组,初始值都为0;2、malloc为函数,开辟...原创 2019-03-29 15:23:14 · 88 阅读 · 0 评论 -
栈&调用约定&函数默认值&inline函数
.data存放已初始化但初始化不为0的数据.bss存放未初始化或初始化为0的数据强弱符号强符号:已初始化的全局变量弱符号:未初始化的全局变量规则:1、两强符号——重定义错误2、一强一弱,选强符号3、两弱符号,针对编译器不同选择不同函数堆栈调用:move 移值 lea 移地址四个寄存器:eax ebx ecx edxebp 栈底指针寄存器...原创 2019-01-10 22:34:26 · 196 阅读 · 0 评论 -
c/c++的相互调用&引用
c/c++的相互调用:由于在c和c++中函数符号解析不同,因此不能直接在一方调用另一方1、c++中调用c语言的函数:.在cpp加extern"c"如extern " c"{}c中调用c++:1、c++源文件可以修改 .cpp加extern"c";2、c++源文件不可修改则加中间层,即自己写一个中间文件,在中间文件引入不可修改文件和extern " c"引用:引用...原创 2019-01-10 22:55:10 · 597 阅读 · 0 评论 -
开辟内存new/malloc&作用域
c++中开辟内存用new关键字 如:int *p=new int;释放内存 用delete 如delete p;new 的作用:1、开辟内存 2、初始化 3、开辟数组 4、释放数组c++中开辟一维数组 如 int *cppp=new int[10] ;释放数组 delete []cppp;c语言中开辟一维数组:int *cp=(int *)malloc(sizeof(int)...原创 2019-01-10 23:16:37 · 917 阅读 · 0 评论 -
类和对象
类不占空间,对象才占空间模拟实现:c++三大特征:封装、继承、多态c++三个访问限定符:1、public:任意位置(类中、类外)可见2、protected:在本类中和子类类中访问3、private:在本类类中访问行为一般设为公有成员变量方法,属性设为私有成员变量栈上的特点:系统开辟,系统释放堆上的特点:用户开辟,用户释放类中的六个默认函数1、构造函数...原创 2019-01-19 11:35:16 · 120 阅读 · 1 评论 -
内存池的设计及思想?
1、内存池是什么?内存池是一组资源的集合。程序在申请堆上的内存时,我们可以给它一大块内存(远超出程序要申请的大小,即内存池),并且自己管理,而不是它要多少就从切换到内核态,给它多少。应用程序可以通过调用系统的内存分配函数预先一次性申请适当大小的内存作为一个内存池,并为这个内存池类或结构体定义一些分配和释放内存块的成员函数。之后应用程序自己对内存的分配和释放则可以通过这个内存池类及其成员...原创 2019-09-12 14:42:40 · 196 阅读 · 0 评论