zoukankan      html  css  js  c++  java
  • 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(操作符)和构造函数

  • 相关阅读:
    差分隐私 differential privacy privSQL ||sql query ||sql查询系统||PrivateSQL:A Differentially Private SQL Query Engine论文笔记
    分冶法解决大整数相乘 最近对问题
    数论 矩阵交集
    STl 优先队列 C++
    备份mysql函数和存储过程
    Idea 注解模板
    excel导出
    帆软常用小技巧
    js + java文件下载
    try/finally
  • 原文地址:https://www.cnblogs.com/tony-xu999/p/8573972.html
Copyright © 2011-2022 走看看