引用与函数指针:

函数指针就是把函数名挖掉变成*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的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  10. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

随机推荐

  1. [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比

    <<返回目录 平均值 vs 百分比 在考虑要性能测试的目标值时,我们需要考虑用什么统计口径.大多数人都会首选平均值,但在大多数情况下,这个正确的,但你也应该适当的考虑百分数.但你有可用性的 ...

  2. opencv 3.3.0 如何旋转图像?

    函数介绍 1. void cv::flip(InputArray src,OutputArray dst,int flipCode) 2. void cv::transpose(InputArray ...

  3. TCP协议的三次握手和四次分手

    HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. ...

  4. openstack-ocata-镜像服务3

    一. 镜像服务概述 镜像服务(glance)使用户能够发现.登记,并检索虚拟机镜像.它提供了一个REST API,使您可以查询虚拟机镜像元数据和检索一个实际的形象.可以存储虚拟机镜像通过镜像服务在不同 ...

  5. Python模拟登录成功与失败处理方式(不涉及前端)

    任务说明: (1) 用户输入用户名,如不存在此用户不能登录: (2) 用户在输入密码时,如果连续输入三次错误,则该用户被锁定一段时间; (3) 用户被锁定一段时间后,可再次进行尝试登录: 程序使用库: ...

  6. 【linux】 LINUX FTP搭建

    1.安装ftp服务 yum install vsftpd 2.编辑配置文件 vsftpd的配置文件有三个,分别是:/etc/vsftpd/vsftpd.conf/etc/vsftpd/ftpusers ...

  7. Maximum Entropy Model(最大熵模型)初理解

    0,熵的描述 熵(entropy)指的是体系的混沌的程度(可也理解为一个随机变量的不确定性),它在控制论.概率论.数论.天体物理.生命科学等领域都有重要应用,在不同的学科中也有引申出的更为具体的定义, ...

  8. JXL组件生成报表报错(一)

    JXL组件生成报表 1.具体报错如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonami ...

  9. hi3531的pcie控制器使能

    1. 关闭PCIe 控制器: 通过向系统控制寄存器PERIPHCTRL30[pcie0_app_ltssm_enabl]写入0 关闭PCIe0 控制 器. 通过向系统控制寄存器PERIPHCTRL77 ...

  10. hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

    一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx. ...