c++
一颗程序媛0915想上岸
越努力,越幸运……
展开
-
写时拷贝
浅拷贝:当在进行对象的复制时,只是进行对象数据成员的拷贝,其中默认的拷贝构造函数也是浅拷贝弊端:当多个对象共用同一个内存块时,若其中一个对象修改,其他对象的内容也修改,系统会崩溃深拷贝:拷贝的是对象本身,会再申请一个内存来存储,修改一个的值不会影响另一个弊端:若只使用,不修改,则会导致内存的利用率低写时拷贝:引用计数的拷贝时用来解决浅拷贝存在的问题实现:我们为每个内存的字符数...原创 2018-11-21 18:17:50 · 137 阅读 · 2 评论 -
函数调用堆栈的过程
分析函数的调用过程,以一段代码为例:#include<stdio.h>int sum(int a,int b){ int tmp=0; tmp=a+b; return tmp;} int main(){ int a=10; int b=20; int ret=0; ret=sum(a,b); printf("ret=%d\n",ret); ret...原创 2019-07-18 20:47:54 · 1490 阅读 · 1 评论 -
C++编译链接运行原理
1.编译链接1.1编译链接过程1.2编译链接各阶段的任务预编译---->.i将所有的”#define”删除,并展开所有的宏定义; 处理所有条件预编译指令,比如”#if” “#endif” “elif” “else” “#endif”; 处理“#include“预编译指令,将被包含的文件插入到该预编译指令的位置 ; 删除所有的注释; 添加行号和文件标识名...原创 2019-07-21 09:30:34 · 267 阅读 · 0 评论 -
指针和引用的区别
指针:是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;引用:引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。int a=1;int *p=&amp;a;定义了一个整形变量a和一个指针变量p,p指向a的存储单元,即p的值是a存储单元的地址。int a=1;int &amp;b=a;定义了一个整形变量a和a的引用b,事实上a和b是同一个东西,在内...原创 2019-01-13 18:39:44 · 178 阅读 · 0 评论 -
C++总结(三) 类和对象、类中默认的函数
一、对象和变量变量 :开辟内存对象 :开辟内存+初始化封装:将属性和实现细节隐藏起来,对外提供公有的接口进行访问访问限定符:Public:任意位置Protected:本类+子类private:本类属性一般私有 行为一般公有通过公有的行为访问私有的属性 属性一般通过访问限定符类成员方法的调用约定 :this_callthis指针指向对象的内存空间 访...原创 2019-07-26 20:26:56 · 160 阅读 · 0 评论 -
C++总结(二) const、 new 、引用
目录一、函数重载 重载的三要素二、New malocNew和malloc的区别:Delete 、delete[] ?三、Constc、c++中const的区别常函数 void fun() const {}常对象四、引用五、内联 inlineInline函数和static修饰的函数的区别Inline函数和宏的区别Inline缺点...原创 2019-07-23 11:04:37 · 785 阅读 · 0 评论 -
const 详解
一、 const:关键字,限定一个变量不可被修改二、const的使用2.1 定义const变量:初始化完成后,值不可被修改2.2 const和指针常量指针:不能通过指针修改指针所指向的变量的值。但是指针可以指向别的变量。指向常量的指针(指针常量):指针常量的值不能被修改,即不能存一个新的地址,不能指向别的变量。但是可以通过指针修改它所指向的变量的值。2....原创 2019-08-18 19:11:57 · 13848 阅读 · 2 评论 -
手撕单例模式 (懒汉式 双重锁机制)
什么是单例模式?单例模式就是一个类只能被实例化一次 ,更准确的说是只能有一个实例化的对象的类。(确保内存中只有一个的对象,该实例必须自动创建,并且对外提供) 优点 在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。 缺点 没有抽象层,因此扩展很难职责过重,在一定程序上违背了单一职责 分类 懒汉式和...原创 2019-10-07 09:17:29 · 2686 阅读 · 3 评论 -
STL->容器
1:关联容器和顺序容器c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的k...原创 2019-03-31 19:43:11 · 466 阅读 · 0 评论 -
设计模式——> 观察者模式
观察者模式又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式观察者模式(MVC模式) MVC M model 数据 观察者 V view 界面/视图 监听者 c control 逻辑处理观察者模式的三要素:...原创 2019-01-22 19:18:45 · 177 阅读 · 0 评论 -
虚函数
一、虚函数:拥有vitual关键字的函数作用:为了实现动态绑定,即程序在运行的时候动态的选择合适的成员函数二、成为虚函数满足的条件:1、函数依赖对象调用,虚函数存在于虚表中,有一个虚函数指针指向虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针存在于对象中;2、函数可取地址,虚表中存放虚函数的入口地址,若函数不能寻址,则不能成为虚函数;三、不能成为虚函数的函数:1、内联函数,内...原创 2019-01-14 17:41:01 · 206 阅读 · 0 评论 -
单例模式
单例模式:一个类只能生成一个对象的设计模式1.屏蔽生成对象的接口,构造函数的实现和拷贝构造函数的声明,都放在私有下;2.类中提供一个接口来生成唯一的对象 返回值必须是类*或者类&amp;amp;amp;(保证不会产生临时对象);局部对象不能返回指针和引用,所以对象放在全局;3.函数设置为静态的(static),摆脱接口对对象的依赖,用作用域可调用;4.对象存放在堆上.(静态方法访问静态成员变量);实现线...原创 2018-11-20 17:10:41 · 154 阅读 · 0 评论 -
运算符重载:string类
运算符重载规则如下:①、 C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。②、 重载之后运算符的优先级和结合性都不会改变。③、 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。不能重载的运算符只有五个:它们是:成员运算符“.”...原创 2018-11-21 17:30:50 · 1443 阅读 · 0 评论 -
运算符重载:复数类
运算符的重载:1,只能重载已存在的运算符2,自定义类型和内置满足的相同的逻辑1.普通运算符可以重载2.类型重载const :1、防止实参被修改;2、接收隐式生成临时对象;类内是this_call的调用约定,成员方法隐藏this指针,指向一般为左操作数,所以只用传右操作数即可代码如下:class CComplex{public:CComplex(int real, int...原创 2018-11-21 16:11:43 · 439 阅读 · 0 评论 -
快速排序及五种优化(模板)
1、快速排序的基本思想:快速排序排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,递归地以达到整个序列有序的目2、快速排序的三个步骤:(1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 “基准”(2)分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在基准左边的元素都比...原创 2018-11-24 20:24:53 · 514 阅读 · 0 评论 -
继承与派生(一)
1.继承的作用:代码复用继承和派生, 基类和派生类class Stu : public People类标识 类名 访问限定符 基类类名访问限定符一般都为public2.派生类继承基类的什么东西除了基类的构造和析构函数以外的所有成员 所以,派生类的构造需要自己实现参考代码: class Base { ...原创 2018-12-04 17:15:31 · 302 阅读 · 0 评论 -
序列容器vector和迭代器
一、容器vectorvector类模板提供了一种占用连续内存地址的数据结构。这使得它可以高效,直接的利用下标运算符[]访问vector中的任一元素,当一个vecto的内存空间耗尽时,它会分配一个更大的连续空间(数组),把原先的数据复制(或移动)到新的空间(数组),并把原来的空间(数组)释放。实现vector容器的类名为vector,包含类vector的头文件是,并且命名空间为std二、迭代器...原创 2018-11-30 22:47:10 · 326 阅读 · 0 评论 -
虚基类指针vbptr和虚函数指针vfptr
一、虚继承1.问题:多重继承 ==》 派生类对象中内存重复 ==》 访问冲突 内存浪费2.解决:对出现多份的数据在最近的继承前加viture3.虚继承时,虚基类指针vbptr指向虚基类表vbtable,虚基类表中存放的就是数据相对于虚基类指针的偏移,从而根据偏移找到数据vbptr ==> vbtablevbtable 中:0 当前最近作用域的偏移 - vb...原创 2018-12-09 22:46:44 · 8466 阅读 · 10 评论 -
内联函数
内联函数:定义在类体内的成员函数,类的私有,与private,public,protect无关,关键字inline放在定义而非声明,不生成函数符号,在函数调用点将函数直接展开一、inline函数和普通函数的区别:inline函数无开栈,清栈的开销,定义和声明写在头文件中普通函数 使用堆栈调用,只写声明二、inline函数和宏的区别:inline函数可调试,在编译期间替换,有类型检查,安...原创 2019-01-14 16:21:10 · 540 阅读 · 0 评论