C++之引用与new/delete

C++程序
  文件扩展名
    C++源代码的文件扩展名.cpp、.C、.cxx、.c(需要指定编译语言)
  头文件
    标准库中的头文件是不带.h的     

#include 

  自定义的头文件保留.h
  C语言的头文件可以继续使用
    #include /
  输入输出
    cin >> 输入
    cout << 输出
    endl 换行
    cin和cout不再使用占位符,会自动识别数据类型
    scanf、printf可以继续使用
  编译器
    gcc可以编译C++源码,但是需要额外的参数
    g++是编译C++源码的最简单的编译器,操作系统没有默认安装
    ubuntu系统的安装指令

sudo apt-get install g++

    gcc的编译参数可以继续使用
    C++编译时的错误提示不精准,一个错误可能会产生大量的错误提示
  名字空间 

using namespace std;

C++中的基本数据类型
  C++兼容C语言中的所有数据类型(C++兼容C有语言的所有语法)
  添加了bool类型
    字节宽度为1、值 true(!0)/false(0)
    输出时添加参数boolalpha,可以将值的显示格式转换成 true/false
  void *与其他类型的指针转换受到限制
    void *不可以直接给其他类型的指针赋值,必须经过强制转换
    任意类型的指针都可以给void *赋值
C++中的联合、枚举、结构
  在C++中联合、枚举、结构设计成功后,再使用不需要添加关键字
  枚举的检查更为严格(枚举成为一种独立的数据类型)
  结构成员中可以有函数,在函数中可以直接访问结构成员
  结构对象可以继续使用.或->访问成员或成员函数
  结构成员添加了访问属性
    public 开放,任何位置都能使用
    private 私有,只能在成员函数中使用
    protected 保护
  结构在创建时会自动调用一个函数,即构造函数
    函数名 结构名
    参数任意
    无返回值
  结构在释放时会自动调用一个函数,即析构函数
    函数名 ~结构名
    无参数
    无返回值
引用
  再定义
  引用必须初始化,否则编译错误
  不仅可以引用标识符,也可以引用立即数(右值、字面值、常量),但必须加const属性
  不能定义空引用,但悬空引用是存在的(引用了堆内存的数据,当堆内存释放后就不应该再使用)
  引用是一次性的,无法再更改,引用一旦成功,就成为变量,不会再改变
  引用也可以当作函数的参数,引用的对象是函数的实参,达到类似指针的作用
    函数之间共享变量
    提高参数的传递效率(高于指针)
    可以获取参数
  引用可以当作函数的返回值,但不能返回局部变量引用
  能使用引用就不要使用指针了,但引用不能完全代替指针
内存管理运算符
  在C++中使用 new/delete 来管理内存,new 用来申请内存, delete 用来释放内存
  new 在申请内存时允许对内存进行初始化
  使用 new 创建结构对象时会自动调用构造函数, delete 时会自动调用析构函数
  malloc/free 与 new/delete 区别
    malloc/free 函数在使用时需要添加头文件,new/delete 是C++中的运算符,不需要头文件
    malloc 返回值是void*指针,new 返回的是有类型的指针
    malloc 创建对象时不会调用构造函数,free 时不会调用析构函数, 但 new/delete 会调用构造函数以及析构函数
    使用malloc使用内存时需要自己计算字节数,而使用 new 的时候自动计算
    []可以配合 new/delete 申请/释放数组
    new[] 只能和 delete[] 配合使用,new[] 了多少个对象就会调用多少次构造函数,delete[]就会调用多少次析构函数
    new/delete 与 malloc/free 不能混用
    delete 不可以重复释放,但是可以连续释放空指针
    使用new申请内存失败会抛出异常"std::bad_alloc"
C++中的函数
  C++中函数可以在main前执行,C不行
  C++中函数名字可以相同,只要参数不同即可(函数重载,不只是参数)
    函数可以重名,并不是真正意义上的重名,只是在编译期间在函数名中添加了额外信息(函数的参数)
  内联函数
    把函数编译成二进制,然后在需要的位置直接把函数拷贝过去,而不是跳转后才执行,这样可以减少进出栈和调用,以此提高程序的执行效率,但这样会增加可执行文件的大小
    内联函数与宏函数的区别
      从本质上来说是一样的,但内联函数可以检查参数,也可以具有返回值
    inline 返回值 函数名(参数);
  C++中函数可以有默认值
    函数的默认参数要靠右
    默认参数尽量少用,可能发生重载错误
    函数的默认参数是编译器在编译时帮助赋值的,所以只能由全局变量、静态变量、字面值对参数进行赋值

你可能感兴趣的:(C++之引用与new/delete)