
c++
深入学习
嘘......
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++的编译过程,预处理指令
C++的编译过程1)编译 :把源代码翻译成机器语言,形成目标文件1.1)先进行编译预处理预处理又称为预编译,是做些代码文本替换工作。编译器执行预处理指令(以#开头,例如#include)替换成其包含的文件代码。这个过程会得到不包含#指令的.i文件。1.2)编译优化这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。这个过程将.i文件转化位.s文件。1.3) 汇编把汇编语言翻译成目标机器指令的过程,生成目标文件(.obj .o等)。目标文件中存放原创 2021-03-16 22:49:51 · 365 阅读 · 0 评论 -
map,hashmap
底层实现map实现的思想是散列 hash;数组的特点是查询快,增删慢,而链表的特点是查询慢,增删快;map本身也是hash表的一种实现map的具体实现 是 数组加上单向链表, 就是一个数组(位桶数组,为了实现散列,默认长度16),每个元素都是一个链表(Node);node由hashcode码(底层编码),键值对,next 组成; 最后得到的是 Node[] table;一般过程是:通过key值得到hashcode(比如35125162213很长一串);通过取余算法来得到一个hash值(p<原创 2021-03-15 19:24:24 · 95 阅读 · 0 评论 -
final,finalize,finally
参考资料final修饰类,表示该类不可以被继承修饰变量,表示该变量不可以被修改,只允许赋值一次修饰方法,表示该方法不可以被重写finally是java保证代码一定要被执行的一种机制。比如try-finally或try-catch-finally,用来关闭JDBC连接资源,用来解锁等等finalizefinalize是Object的一个方法,它的目的是保证对象在被垃圾收集前完成特定资源的回收。不过finalize已经不推荐使用,JDK9已经标记为过时。...原创 2021-03-15 16:32:32 · 89 阅读 · 0 评论 -
String,StringBuffer,StringBuilder
StringBuilder是线程不安全的,执行效率高,可变StringBuffer是线程安全的,加了synchronized同步关键字,执行效率高,可变String是线程安全的,不可变对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象StringBuffer 类则对 StringBuffer 对象本身进行操作...原创 2021-03-15 16:31:20 · 103 阅读 · 0 评论 -
内存
管理参考文献内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理。块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但是易于管理。页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法原创 2021-03-15 16:18:12 · 114 阅读 · 0 评论 -
类的初始化顺序
构造函数调用的次序是先基类的析构后派生类的析构析构函数调用的次序是先派生类的析构后基类的析构先构造的后析构,后构造的先析构(静态变量、静态初始化块)>(变量、初始化块)>构造器继承:父类–静态变量父类–静态初始化块子类–静态变量子类–静态初始化块父类–变量父类–初始化块父类–构造器子类–变量子类–初始化块子类–构造器对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序取决于它们在类中出现的先后顺序。...原创 2021-03-15 16:15:49 · 96 阅读 · 0 评论 -
STL(常用的算法,各种容器,迭代器)STL容器是线程安全的吗
线程安全的情况多个读取者是安全的。多线程可能同时读取一个容器的内容,这将正确地执行。当然,在读取时不能 有任何写入者操作这个容器。对不同容器的多个写入者是安全的。多线程可以同时写不同的容器。线程不安全的情况在对同一个容器进行多线程的读写、写操作时。在每次调用容器的成员函数期间都要锁定该容器。在每个容器返回的迭代器(例如通过调用begin或end)的生存期之内都要锁定该容器。在每个在容器上调用的算法执行期间锁定该容器。为了效率,没有给所有操作加锁。不同线程同时读同一容器对象没关系,不同线程同时原创 2021-03-15 16:02:12 · 1055 阅读 · 0 评论 -
重载与重写
重载同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表重写存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型注:(1)子类中不能重写父类中的final方法(2)子类中必须重写父类中的abstract方法方法重写又称方法覆盖。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。子类函数的访问修饰权限不能少于父类的面试原创 2021-03-15 15:48:22 · 161 阅读 · 0 评论 -
虚函数和纯虚函数的区别,虚函数如何实现。接口和抽象类和普通类
参考文献纯虚函数:含有纯虚函数的类被称为抽象类。只有声明没有定义,只有在子类中实现才可以使用,使用后就变成了虚函数。如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。虚函数:是C++中用于实现多态的机制。核心理念就是通过基类访问派生类定义的函数必须实现,如果不实现,编译器将报错。父类和子类都有各自的版本。由多态方式调用的时候动态绑定。相同点:都可以在子类中被重载,以多态的形式被调用。原创 2021-03-14 12:14:08 · 207 阅读 · 0 评论 -
封装,继承(复合),多态(含义,例子,实现,关系)
参考文献封装含义:封装又叫隐藏实现。就是只公开代码单元的对外接口,而隐藏其具体实现。例子:手机,电脑,电视等。只需要知道如何去操作,并不需要知道他们里面是怎么构造的,怎么实现这个功能的。实现:通过访问控制实现的。 Public, Protected, Private 等访问控制符。通过用Public将信息暴露,Private,Protected将信息隐藏,来实现封装。意义:a.封装使得对代码的修改更加安全和容易。将代码分成了一个个相对独立的单元。使接口不变,其他代码可以自由修改对代码访原创 2021-03-14 09:39:52 · 348 阅读 · 0 评论 -
struct和class区别
参考文献Struct:值类型,默认访问权限public,重载后默认函数仍保留;重载构造函数时,必需对struct中的变量全部初始化;内存在定义的时候就分配了,new就是执行一下构造函数创建一个新实例再对所有的字段进行CopyClass:对象类型,默认访问权限private,重载后默认函数不保留,内存在new的时候分配,即在堆上分配一块内存然后再执行构造函数...原创 2021-03-14 09:25:12 · 111 阅读 · 0 评论 -
new、malloc和delete、free的区别与联系
参考文献参考文献C++中,用new和delete动态创建和释放数组或单个对象。new:动态创建对象时,只需指定其数据类型,而不必为该对象命名,new表达式返回指向该新创建对象的指针,我们可以通过指针来访问此对象。int *pi=new int;delete:释放指针指向的地址空间。delete pi ;// 释放单个对象delete [ ]pi;//释放数组如果指针指向的不是new分配的内存地址,则使用delete是不合法的。引起问题:悬空指针:delete pi; //执行完该语原创 2021-03-14 09:17:00 · 308 阅读 · 0 评论 -
全局变量,static变量,const变量,局部变量(作用域、生存周期)
Static变量:作用域 : 当前“源”文件中,其他文件无法访问生命周期:整个程序运行过程全局变量:作用域: 所有的“源”文件中,在一个文件中定义,其他文件使用时,使用extern 进行声明,告诉编译器,去其他的地方找这个变量的定义生命周期:整个程序运行过程Const常量:作用域:当前“源”文件中,其他文件无法访问,如果需要定义一个全局的const变量,应该进行“声明定义”extern const xxx;生命周期:整个程序运行过程局部变量:作用域:当前文件的代码块内,被{}包括起来的原创 2021-03-14 01:59:01 · 227 阅读 · 0 评论 -
引用与指针的区别
指针:存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变引用:别名,在逻辑上不是独立的,具有依附性,必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。指针占用内存空间:在32位(X86)操作系统下,指针占用四个字节大小,不管什么类型在64位(X64)操作系统下,指针占用8个字节,不管什么类型引用本质上是一个指针常量,在内存中为引用开辟了一个指针型的内存单元...原创 2021-03-14 01:57:05 · 122 阅读 · 0 评论 -
深拷贝和浅拷贝的区别
参考文献一,数据类型数据分为基本数据类型和对象数据类型。基本数据类型的特点:直接存储在栈中的数据引用数据类型的特点:在栈中存储了指针,该指针指向堆中该实体的起始地址。///////////////////////////////////////////////////////////////////////////////////////////////////////////////////二。深拷贝和浅拷贝的区别深拷贝和浅拷贝是只针对引用数据类型浅拷贝只复制指向某个对象的指针,新旧对象还原创 2021-03-14 01:49:28 · 99 阅读 · 0 评论 -
C++,c,java,python区别
参考文献C++、Java和Python:面向对象C:面向过程C,C++,Javs:强类型语言(变量类型是不能改变)Python:弱类型语言(变量是随需改变的)1)python: 脚本语言,适合快速开发应用程序优点:编程简单,容易学习,语法简单,库非常丰富,可以迅速地开发程序,无论是网站还是小游戏都非常方便缺点:运行效率较低,不适合对运行效率要求较高的程序用途:**爬虫,Web开发,视频游戏开发,桌面GUIs(即图形用户页面),软件开发,架构等2)java: 健壮的大型软件优点:1原创 2021-03-14 01:38:28 · 598 阅读 · 0 评论