02. C++核心编程

------------恢复内容开始------------

1. 内存分区模型

  C++程序在执行时,将内存大方向划分为4个区域:

    代码区:存放函数体的二进制代码,由操作系统进行管理的

    全局区:存放全局变量和静态变量以及常量

    栈区:由编译器自动分配释放,存放函数的参数值,局部变量等

    堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

  内存4区的意义:

    不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程

  1.1 程序运行前

    在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域

    代码区:

      存放CPU执行的机器指令

      代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。

      代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令。

    全局区:

      全局变量和静态变量存放在此

      全局区还包含了常量区,字符串常量和其他常量也存放在此。

      该区域的数据在程序结束后由操作系统释放。

    总结:

      C++ 中在程序运行前分为全局区和代码区

      代码区特点是共享和只读

      全局区中存放全局变量、静态变量、常量

      常量区中存放const修饰的全局常量和字符串常量

  1.2 程序运行后

    栈区:

      由编译器自动分配释放,存放函数的参数值,局部变量等

      注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

    堆区:

      由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

      在C++中只要利用new在堆区开辟内存

    总结:

      堆区数据由程序员管理开辟和释放

      堆区数据利用new关键字进行开辟内存

  1.3 new 操作符

    C++中利用new操作符在堆区开辟数据

    堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符delete

    语法:new 数据类型

    利用new创建的数据,会返回该数据对应的类型的指针、

      int * p = new int(10);

2. 引用

  2.1 引用的基本使用

    作用:给变量起别名

    语法:数据类型 &别名 = 原名

  2.2 引用注意事项

    引用必须初始化

    引用在初始化后,不可以改变

  2.3 引用做函数参数

    作用:函数传参时,可以利用引用的技术让形参修饰实参

    优点:可以简化指针修改实参 

      地址传递  引用传递

    总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单。

  2.4 引用做函数返回值

    作用:引用是可以作为函数的返回值存在的

    注意:不要返回局部变量引用

    用法:函数调用作为左值

  2.5 引用的本质

    本质:引用的本质在C++内部实现是一个指针常量

  2.6 常量引用

3. 函数提高

  3.1 函数默认参数

  3.2 函数占位参数

  3.3 函数重载

    3.3.1 函数重载概述

    3.3.2 函数重载注意事项

4. 类和对象

  4.1 封装

    4.1.1 封装的意义

    4.1.2 struct 和 class 区别

    4.1.3 成员属性设置为私有

  4.2 对象的初始化和清理

    4.2.1 构造函数和析构函数

      构造函数语法:类名(){}

      1. 构造函数,没有返回值也不用写void

      2. 函数名称与类名相同

      3. 构造函数可以有参数,因此可以发生重载

      4. 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次

      析构函数语法:~类名(){}

      1. 析构函数,没有返回值也不用写void

      2. 函数名称与类名相同,在名称前加上符号~

      3. 析构函数不可以有参数,因此不可以发生重载

      4. 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次

    4.2.2 构造函数的分类及使用

      两种分类方式:

        按参数分为:有参构造和无参构造

        按类型分为:普通构造和拷贝构造

      三种调用方式:

        括号法

        显示法

        隐式转换法

    4.2.3 拷贝构造函数调用时机

      使用一个已经创建完毕的对象来初始化一个新对象

      值传递的方式给函数参数传值

      以值方式返回局部对象

    4.2.4 构造函数调用规则

      默认情况下,C++编译器至少给一个类添加3个函数

        1. 默认构造函数(无参,函数体为空)

        2. 默认析构函数(无参,函数体为空)

        3. 默认拷贝构造函数,对属性进行值拷贝

      构造函数调用规则如下:

        如果用户定义有参构造函数,C++不再提供默认无参构造,但是会提供默认拷贝构造

        如果用户定义拷贝构造函数,C++不再提供其他构造函数

    4.2.5 深拷贝与浅拷贝

    4.2.6 初始化列表

    4.2.7 类对象作为类成员

    4.2.8 静态成员

  4.3 C++对象模型和this指针

  4.4 友元

  4.5 运算符重载

  4.6 继承

  4.7 多态

5. 文件操作

posted @ 2020-01-02 17:55  Zzzzzz~  阅读(253)  评论(0)    收藏  举报