C++学习-3
引用与函数指针:
函数指针就是把函数名挖掉变成*p
函数指针的类型就是把p去掉
函数指针的引用(引用就是在类型和名字的中间加&)
函数指针加一个()就成调用函数了-----------p()
总结:
1.相当于初始化int*(函数指针类型 - 包含返回类型和参数)
2.初始化相当于初始化函数块,相当于能做什么事
1的初始化是初始化函数本身
2的初始化才是真正意义上的传参
1(函数体初始化)
2(参数实例化)
总结一下:单单的函数指针定义没有任何实际含义(只是一个空的接口)
初始化相当于赋予函数块功能
然后的调用才是传参引用与指针
引用与指针
引用是栈上的
引用本质是指针
引用不能动态开辟内存(堆)
也是四个字节
3.函数指针数组与引用
int(*p[4])(int a, int b) {add,sub,mul,divv};
//二级指针开辟函数指针数组
int(**pp)(int a, int b) { new(int(*[4])(int, int)){ add,sub,mul,divv } };
个数一定是紧跟在变量名后!!!!
返回值是函数指针的搞法:把指针名挖掉换成函数名,加()里面加参数就完了
4.全局变量优先于main函数
Free不会调用析构函数,delete会调用析构函数
Malloc和free无法调用构造函数和析构函数
只能用new和delete。
内置类型没有就一样的效果
给我的感觉就是:构造函数和析构都只是对内容的初始化和销毁,真正对内存进行创建和销毁的是new和delete;
5.基本数据类型:数组 delete p 和delete []p是一样的
复合数据类型,单个直接delete,复合的就要delete[]p;
单个你去加[]相当于无限删除
6.new和delete的重载
void *operator new(size_t size)
new不管是局部还是全局都会调用一次构造函数
void *operator new[](size_t size)
数组传进去的size多四个字节记录调用构造函数的次数
真正的个数是size-4
void operator delete(void *p)
这里传的是开辟空间的首指针,
void operator delete[](void *p)
如果是类类型,由于delete调用析构函数的次数时根据new调用构造函数的次数来决定的(构造函数会传给delete一个数字四个字节)所以全给delete[]的指针要是划分的首地址,传进去的p是总开辟大小的首地址
局部的重写使用全局作为辅助
全局的重写需要使用malloc和free
空类还是占一个字节
New->::new->malloc->构造函数
New->构造函数
析构函数->delete
析构函数->delete->::delete->free
分配内存优先于构造函数
析构优先于释放内存
7.容器操作:
Pushback,pushfront,clear,assign,back,front,pop_back,pop_front,reverse,sort
Merge归并,前提是每个容器都要是有序的
8.类的空指针可以调用类的函数,代码区是共享的,数据是独立
可以调用,不能访问数据
9.new和delete
整个内存分配的过程:
New:
new一块足够大的未类型化的内存
调用构造函数初始化这片内存
返回指向该内存对象的指针
Delete:
调用析构函数
Operator delete标准库函数释放该对象的内存
现总结C++语言中不能重载的操作符有:
. .* :: ?:
new delete sizeof typeid
static_cast dynamic_cast const_cast reinterpret_cast
可以重载的操作符有:
operator new operator delete
operator new[] operator delete[]
+ - * / % ^ & | ~
! = < > += -= *= /= %=
^= &= |= << >> >>= <<= == !=
<= >= && || ++ -- , ->* ->
() []
10.new(关键字)一下时包含两个子操作operator new(操作符)和构造函数
C++学习-3的更多相关文章
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
随机推荐
- prop&attr区别和用法,以多选框为例
1.比较 相同点 : prop和attr作为jquery的方法都可以获取属性值; 不同点 : (1) 对于HTML元素本身就带有的固有属性,使用prop方法, attr获取checkbox的check ...
- C语言学习之插入排序
此前的一些博文分别写了C语言中经典的排序方式,选择排序 冒泡排序 桶排序,此文就写 插入排序吧. 相对于冒泡排序,插入排序就比较方便快捷了.和冒泡 选择排序一样,插入排序也需要比较大小.可以这样理解插 ...
- postman 中调试接口的小记录
1.form-data: 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件 ...
- Unix代码段和数据段
关于UNIX系统代码段和数据段分开的目的:方便编程. 1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像.代码段需要防止在运行时被非法修改,所以只准许读取操作,而 ...
- galera断电后无法重建集群
节点有一个测试环境,数据库用的三节点galera,测试组的同事把电源同时断了.节后回来开机,发现数据库状态一直有问题,以前遇到这种情况,都是把一个节点中的my.conf中的wsrep配置全删掉,作为一 ...
- csrf
什么是CSRF: CSRF(Cross-site request forgery),中文名称:跨站请求伪造 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发 ...
- js中的Object.defineProperty()和defineProperties()详解
ECMAS-262第5版在定义只有内部采用的特性时,提供了描述了属性特征的几种属性.ECMAScript对象中目前存在的属性描述符主要有两种,数据描述符(数据属性)和存取描述符(访问器属性),数据描述 ...
- 【Unity3D】Unity3D开发《我的世界》之五、创建无限地形(视频)
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_05.html 一.导入Unity3D自带的第一人称角色控制器 直接导入就行,我们用 ...
- 个性化WinPE封装方法----制作过程需要了解的“命令”
1.在现有的Windows7条件下,自动在E盘建立mywinpe文件夹,设置 Windows PE 构建环境,并保存到E:\mywinpe下 copype.cmd x86 E:\mywinpe 2.将 ...
- 错误代码: 1582 Incorrect parameter count in the call to native function 'str_to_date'
1. 错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:SELECT t.`name`, DATE_FORMAT(str_to_d ...