引用与函数指针:

函数指针就是把函数名挖掉变成*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. 用node.js搭建本地服务器

    我的第一篇笔记来写写node.js,我对node.js的并不是很了解,基本的项目路径变换还是会的.原先我下载node.js就是我想学vue.js,后来因为工作的繁忙搁浅了我的计划.最近在学习phase ...

  2. maven 在pom文件下配置默认的jdk版本

    在pom.xml中加入这段代码就可以了 <!-- 设置默认的jdk --> <profiles> <profile> <id>jdk1.7</id ...

  3. Maven中模块的聚合以及对jar包的继承

    我需要将之前的A B C三个模块聚合到一个一个工程中ABC项目中 pom.xml文件中应该这样配置 1.修改packaging里面的配置 <!-- 用于聚合这个项目的时候应该将packaging ...

  4. 在ASP.Net Core下,Autofac实现自动注入

    之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题. 于是在 ...

  5. Duilib第一步(III)-知识进阶

    核心模块 CWindowWnd:窗口对象管理父类 创建窗口. 窗口消息过程处理. 提供窗口子类化.超类化接口. CDialogBuilder:空间布局类 解析XML界面布局文件,构建控件树 创建控件对 ...

  6. Flask從入門到入土(一)——程序的基本結構

    一.初始化 所有Flask程序都必須創建一個程序實例.Web服務器使用一種名爲Web服務器網關接口的協議,把接收自客戶端的所有請求都轉交給這個對象處理.程序實例書Flask類的對象,創建代碼: fro ...

  7. hihoCoder 1044 : 状态压缩·一 状压dp

    思路:状态压缩,dp(i, j)表示考虑前i个数且[i-m+1, i]的选择情况为j.如果要选择当前这个数并且,数位1的个数不超过q,则dp[i+1][nex] = max(dp[i+1][nex], ...

  8. POJ - 3279 枚举 [kuangbin带你飞]专题一

    这题很经典啊,以前也遇到过类似的题--计蒜客 硬币翻转. 不过这题不仅要求翻转次数最少,且翻转方案的字典序也要最小. 解法:二进制枚举第一行的翻转方案,然后处理第二行,如果第二行的k列的上一列是黑色, ...

  9. 03 Spring的父子容器

    1.概念理解和知识铺垫 在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关 ...

  10. Qt Creator 整合 python 解释器教程

    目录 1. 前言 2.前提条件 3.步骤 3.1 新建 python文件 3.2 编写 python 代码 3.3 配置 python 解释器 3.4 执行 python file 1. 前言 Pyt ...