
C++
饭_团
这个作者很懒,什么都没留下…
展开
-
New和malloc的区别
在了解new和malloc的区别之前,我们首先要知道new和malloc的基本用法,malloc/free是C/C++的标准库函数,函数原型如下,而new是C++的运算符。malloc函数原型void *malloc(size_t_size); void* free(void * ptr);动态开辟内存 mall...原创 2019-07-20 11:14:18 · 194 阅读 · 0 评论 -
C++设计模式
C++设计模式是C++学习的重点之一,也是常用的处理问题的方法之一。一、单例模式 类只能实例化一个对象屏蔽构造函数 提供接口生成唯一对象 (1)不依赖对象 (2)不能返回类类型(1)懒汉模式 延时加载 双重锁机制class SingleTon{public: static SingleTon* getInstance() { if (psingle =...原创 2019-08-16 09:46:13 · 230 阅读 · 0 评论 -
关联容器set、map的使用
关联容器是STL容器的另一组成部分,关联容器的底层是红黑树,容器会根据值进行自动调整排序。map与set的底层数据结构决定了他们不会有重复的元素,set.count()函数返回的结果只能整数 0 或 1,1表示有这个元素,0表示没有这个元素;与其功能相似的还有函数find(),find()函数返回值是一个迭代器,成功返回迭代器指向所查找的元素,失败返回迭代器指向endtemplate...原创 2019-08-14 19:42:19 · 129 阅读 · 0 评论 -
三种顺序容器的比较
vector:矢量容器插入:push_back(尾插) O(1) insert (按位置插入) O(n)删除:pop_back(尾删)O(1) erase(按位置删) O(n)访问:O(1)优点:尾部操作和随机访问速度快缺点:不支持头插、任意位置删除和插入复杂度较高扩容方式:...原创 2019-08-09 19:58:25 · 861 阅读 · 0 评论 -
STL容器
STL标准模板库是C++学习的重点,STL中包含六部分容器、迭代器、泛型算法、函数对象、适配器以及空间配置器。今天首先了解一下容器,容器是一种容纳特定类型对象的集合,C++容器分为顺序容器和关联容器。顺序容器:元素的值与元素在容器中的位置无关,可以在指定位置插入或者删除元素。vector:矢量容器,数组 #include<vector> list::双向链表容器 双向...原创 2019-08-09 12:07:22 · 103 阅读 · 0 评论 -
智能指针(二)
上一篇博客将了两个智能指针auto_ptr和unique_ptr。指路智能指针(一)今天我们继续来了解剩下的两个智能指针,shared_ptr和weak_ptr.shared_ptr特点:强智能指针,带有引用计数的指针,实现智能指针共享数据 引用计数为0时,释放所指向的内存空间,所有权不唯一缺点:智能指针相互引用,导致内存泄漏,相互引用如图所示:...原创 2019-08-08 18:42:52 · 139 阅读 · 0 评论 -
C++继承关系
C++中继承主要有三种关系:public、protected和private。为了代码复用。(1)public继承public继承是一种接口继承,子类可以代替父类完成父类接口所声明的行为。此时子类可以自动转换成为父类的接口,完成接口转换。从语法角度上来说,public继承会保留父类中成员(包括函数和变量等)的可见性不变,也就是说,如果父类中的某个函数是public的,那么在被子类继承后仍然是...原创 2019-07-29 10:20:05 · 890 阅读 · 0 评论 -
智能指针(一)
智能指针是实现自主的内存回收机制, C++中动态开辟内存需要程序员手动开辟、手动释放。然而有可能会出现程序员忘了释放,产生内存泄漏。引入智能指针就可以有效的避免这个问题,我们都知道栈上的空间是由系统开辟系统释放,而堆上的空间是由程序员手动开辟手动释放,智能指针结合堆栈开辟空间的特点,实现由程序员手动开辟,系统自动释放的内存回收机制。智能指针就是让栈上的对象指向堆上的内存空间,当程序结束时,栈上...原创 2019-08-05 09:40:34 · 157 阅读 · 0 评论 -
虚继承
虚继承:主要解决内存重复的问题,同时避免访问冲突。声明格式:class 类名 :virtual 继承方式 类名继承方式可以缺省,缺省之后默认继承方式为 private 私有继承。#include<iostream>#include<string>using namespace std;class A{public: A(int a) :ma...原创 2019-08-02 10:19:33 · 8214 阅读 · 0 评论 -
纯虚函数
纯虚函数:不能实例化对象,可以做指针和引用,拥有纯虚函数的类是抽象类。作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。声明格式:virtual 类型 函数名(参数列表)= 0(1)纯虚函数没有函数体;(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;(3)这是...原创 2019-08-01 20:02:19 · 10866 阅读 · 1 评论 -
虚函数
在了解虚函数之前我们先了解一下多态,什么是多态???多态:允许将子类类型的指针赋值给父类类型的指针,该指针会指向子类中的父类部分。多态的目的为了接口复用,即统一接口不同形态。静多态 编译阶段确定函数的调用(函数入口地址)静态绑定 早绑定通过函数重载和模板来实现动多态 运行阶段确定函数的调用(函数入口地址)动态绑定 晚绑定 使用虚函数来实现动多态的实...原创 2019-08-01 15:38:19 · 1301 阅读 · 0 评论 -
Const关键字
const关键字限定一个值不能被修改,产生静态作用。const修饰的数据类型是常类型,C语言const 常变量 编译阶段,判断常变量是否做左值,其他处理与变量一样。 当我们试图修改常变量时系统会提示我们错误, const int a = 10; a = 20; //试图直接修改a的值,1,3错误 int *p = &a;//试图通过指...原创 2019-07-21 17:54:26 · 178 阅读 · 0 评论 -
static关键字(二)
上一篇博客总结了static在面向过程中的用法以及基本概念,这篇博客承接上一篇继续讲static在面向对象中的用法。1. 类的静态成员(面向对象)在类内数据成员的声明前加上关键字static,该数据成员就是累的静态数据成员。在类中,静态成员可以实现多个对象之间的数据共享,静态数据成员只存储一处,供所有对象共用。并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。存储区域:全局数据...原创 2019-07-23 16:06:04 · 136 阅读 · 0 评论 -
static关键字(一)
接下来会有两篇连续的博客来介绍static关键字,static关键字在我们学习中是一个重点,在不同作用域下,不同语言中都有不同的含义和用法。我将从面向过程和面向对象两个方面介绍static关键字,我们今天先从面向过程中的static开始总结。加了static关键字的全局变量只能在本文件中使用 static定义的静态局部变量分配在数据段上,普通的局部变量分配在栈上,会因为函数栈帧的释放而被释放...原创 2019-07-23 10:56:19 · 178 阅读 · 0 评论 -
结构体、联合体以及枚举
结构体、联合体以及枚举类型是我们在学习C/C++中经常遇到的一些数据结构,接下来我们就来认识和区别一下他们。结构体:(struct)用途:把不同的数据组合成一个整体——自定义数据类型C语言:在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指...原创 2019-07-31 18:23:22 · 1881 阅读 · 1 评论 -
指针和引用的区别
执行结果:引用:引用相当于“别名”,它的底层是依靠指针来实现的引用一定要初始化 底层使用指针支持,在所有变量使用的地方系统会自动解引用 引用不可以引用不能取地址的数据(无地址) 引用不能改变 引用变量时,使用的是引用变量所引用的变量 C++ 中(const int &)常引用可以引用不能取地址的数据,因为数据会生成一个临时量,常引用引用引用临时量。引用与指针的区别指...原创 2019-07-21 10:50:15 · 263 阅读 · 0 评论 -
inline函数
inline函数也称为内联函数或内嵌函数,inline定义的类的内联函数,函数代码被放入符号调用表,使用时直接展开,不需要调用,即在编译期间将所调用的函数的代码直接嵌入到主调函数中,是一种以空间换时间的函数。inline函数与普通函数的比较普通函数有开栈和清栈,inline函数无开栈和清栈。当执行开销(代码小)< 调用开销(开栈)时,建议用inline当执行开销(代码...原创 2019-07-19 22:11:26 · 5013 阅读 · 0 评论 -
一个简单的内存池
内存池是我们经常使用的一种池,常见的池还有进程池、线程池和连接池,今天我们就先讨论内存池。首先看一下池的定义池:池就是在初始时,申请比刚开始要使用的资源大的多的资源空间,接下来使用时,直接从池中获取资源。内存池:即在初始时申请分配一定数量的。大小相等的内存块留作备用,此后如有需要直接从该内存上进行分配,与传统的new、melloc申请空间相比,这种机制减少了频繁从内核中申请空间产生大量的内...原创 2019-07-31 09:39:29 · 381 阅读 · 0 评论 -
C、C++、java的区别
博主面试的时候被问到这三个编程语言的区别,之前没有做过系统性的整理,回答问题的思路比较散乱,今天整理一下,首先是C、C++的区别,C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象...原创 2019-09-15 19:11:29 · 5166 阅读 · 0 评论