第一章 从C到C++


*北大郭炜C++慕课听课笔记*


引用

  • 相当于给变量取了别名,对其中任意变量的修改也会造成另一变量值的改变

  • 用法:

    • 引用定义后不可再修改引用对象

    • const变成常引用变量时,不可通过引用变量更改引用值(常指针变量与之类似)

  • 用于函数形参

  • 用于函数返回值

    int &getn(){return n;}
    int main(){
        getn()=5;
        output(n);
        return 0;
    }
    

动态内存分配

  1. 用法

    int *p=new int;
    delete p;
    p=new int[10]; //Assign space of the int array for p
    delete [] p; //Delete the array
    
  2. malloc/free的差异:

    • new能够创建对象,会调用构造函数,而malloc只是单纯分配了一块空间
    • delete删除对象时调用析构函数,保证类内申请的动态内存能通过析构函数一并释放,而free只是单纯释放指针所指空间
  3. delete&delete []的差异:

    • 对于简单类型的数组,两者无差异
    • delete虽释放数组空间,但只调用第一个元素的析构函数,其余元素不调用。

函数缺省参数&内联函数&重载函数

缺省参数

  1. 目的:提高程序可扩充性(新增参数时,不需要修改原有参数)
  2. 只能是右边的连续几个参数缺省,不可以跳过某个参数

内联函数

  1. 目的:减少函数调用开销
  2. 适用于简单的函数,执行速度快
  3. 编译器直接将函数代码嵌入调用处

重载函数

  1. 目的:减小命名的复杂性
  2. 条件: 函数名相同,函数输入参数个数 | 类型 | 顺序不同(返回类型不同的不算)
  3. 编译器根据函数输入类型选择相应函数

类与对象

结构化程序设计的缺陷

  1. 程序=数据结构+算法
  2. 程序由全局变量及众多相互调用的函数组成,函数与其操作的数据结构没有直观联系
  3. 随程序规模增大,函数与数据结构的关系、函数间调用关系不直观
  4. 没有封装、隐藏概念,不利于程序维护、扩充、排错
  5. 关系复杂,难以复用

面向对象程序设计

  1. 面向对象的程序=类+类+类+……

  2. 将数据结构和操作该数据结构的函数捆绑在一起——即封装

  3. 特点:抽象、封装、继承、多态

  4. 内存分配:等于成员变量大小之和,函数为对象公用,另外存储

  5. 运算:可以用=赋值,但不能直接比较大小

  6. 访问属性:

    • private仅该对象成员函数或同类成员函数可访问
    • protected 仅同类成员函数及派生类可访问
    • public 任意位置可访问
  7. 隐藏: private对象仅可通过成员函数访问,便于后期程序维护

  8. 函数重用: 成员函数参数表不同即可(需要注意避免缺省参数二义性),如

    class A{
        int x;
        public:
        	void value(int n=0){x=n;}
        	int value(){return x;}
    } //当调用value()时,存在二义性
    
posted @ 2020-04-04 15:10  DreamEagle  阅读(323)  评论(0编辑  收藏  举报