崔毅东 C++程序设计入门(上) 第3单元:更上一层楼 – 超越C的语法 笔记

第1节:基本数据类型与运算

  1. typedef and #define
    在这里插入图片描述
  2. bool (布尔类型)
    bool isMyBook;
    bool isRunning = false;
    bool isBoy( );
    bool hasLicense();
    bool canWork();
    bool shouldSort();
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 问题:C++代码中该不该用 #define?
    #define这个预处理语句在C程序中非常常见。
    那么,在C++程序中,是否应该继续使用 #define 呢?
    答:const定义常量是有数据类型的,而#define宏定义常量却没有。
    这样const定义的常量编译器可以对其进行数据静态类型安全检查,而#define宏定义的常量却只是进行简单的字符替换,没有类型安全检查.另外,const的作用域只在函数局部,而#define的作用范围从程序开始到程序结束,容易出现超出范围的使用。(by 希格斯玻色子0001)

第二节 函数

在这里插入图片描述在这里插入图片描述
重载函数:生成一个同名不同参数的函数
编译器如何匹配重载函数调用:看参数的个数、类型和顺序
在这里插入图片描述
在这里插入图片描述
只有5可行
A default argument shall not be redefined by a later declaration (not even to the same value).
默认参数不应被以后的声明重定义(甚至不应重定义为相同的值)。
在这里插入图片描述
内联函数:
在这里插入图片描述
在这里插入图片描述

第3节:引用与动态内存管理

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
Dynamic Memory
动态内存管理
在这里插入图片描述
在这里插入图片描述
问题:new/delete 与 malloc/free 的区别是什么?
答案:malloc/free 和new/delete 的本质区别:

  1. malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符

  2. new能够自动分配空间大小

  3. 对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能对对象完成动态内存分配和初始化工作的运算符new,以及一个能对对象完成清理与释放内存工作的运算符delete—简而言之 new/delete能进行对对象进行构造和析构函数的调用进而对内存进行更加详细的工作,而malloc/free不能。

  4. 既然new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete,malloc/free必须配对使用。(by 642311352)

第4节:C/C++的简化内存模型

在这里插入图片描述
在这里插入图片描述
栈:局部变量
在这里插入图片描述
在这里插入图片描述

第5节:常量

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
问题1.int x = 0, * const px = &x;
const int* const &pp = px; pp 是什么?
答:x 是一个整型变量;
px 是一个指针常量,指向 x ,px 指向的值可以改变,但 px 本身的值不能变;
pp 是一个引用类型,它引用的是一个指向常量的指针常量,这时不能通过修改 pp 的值来更改 px 的值,同时也不能更改它所指向的 x 的值。(by 疯狂的芒果)
问题2.U03S05-听说过“常函数”吗?
“常函数”是什么东西?
有“非常函数”吗?
“常函数”怎么定义?
“常函数”怎么用?
编译器怎么对付“常函数”?
答:常成员函数声明:<类型标志符>函数名(参数表)const; 说明:
(1)const是函数类型的一部分,在实现部分也要带该关键字。
(2)const关键字可以用于对重载函数的区分。
(3)常函数不能修改成员变量的值(静态成员变量除外,因为静态成员变量不具体作用于哪个对象)也不能调用同类的非常量成员函数(静态成员函数除外,同理)
(by LengXAC 不惑START)

猜你喜欢

转载自blog.csdn.net/dldldl1994/article/details/86677408
今日推荐