第二阶段的复习是以教材,属于扫地雷式复习。其中只摘录笔者不熟悉的地方。
以下内容参见《c/c++程序设计教程》,黄永峰、孙甲松编著,清华大学出版社
第14章 c++类与对象
14.4 类的成员函数
- private函数之恩被奔雷中的其他成员函数所调用,因此private成员函数式类中其他成员的工具函数。
14.4.2 inline成员函数(内置,内嵌)
- 提高程序执行效率
- 编译时讲所调用函数的代码直接替换到主调函数的代码中
- 不能包括复杂的控制语句,如循环,switch
- 在类内定义的、不包括循环等控制结构的,c++编译系统自动将其作为内置函数处理。
14.4.3 成员函数的存储方式和this指针
- c++语言为每一个成员函数专门设立了一个this指针,this指向苯类对象它的值时当前被调用的成员函数所在的对象的起始地址
14.5 类的构造函数和析构函数
14.5.2 构造函数类型
- 参数初始化表的有参数构造函数
- cube(int h,int w,int len):height(h),width(w),length(len){}//函数体可以为空
14.5.3 构造函数的重载
- 默认构造函数(default constuctor):调用时不必给出实参的构造函数。无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。
14.5.4 使用默认参数的构造函数
- 实参和形参的结合是从左到右,所以有默认值的参数放在参数列表的最右端。
14.5.5 类的析构函数
- 当对象的生命周期结束时,自动执行析构函数。
- static局部对象在函数调用结束时并不释放,在main函数完毕或exit()后才调用析构函数
- 析构函数无类型,无返回值,无参数,不能重载,唯一。
- 析构函数和构造函数调用顺序相反。
14.7 共用数据的保护
- 常变量属性(const)——某一变量初始化后,只能被读取,不能被修改。(常对象,常数据成员,常成员函数,常指针,(*#&@(…&*(#!)…*@)
14.7.4 对象的常引用
- 变量引用可以提高函数参数传递的效率
- 如果形参为变量的引用名,实参为变量名,则在调用函数时,并不为形参开辟新的存储空间(拷贝),而是把实参变量的地址传给形参。
14.8 同类对象间的数据共享及类的静态成员
14.8.1 类的静态数据成员
- 静态数据成员不属于某一个对象,在所有对象之外分配空间
- 程序编译时分配空间,程序结束时释放空间
- 只能在类体外进行初始化,不能用构造函数初始化,默认初值为0
14.8.2 类的静态成员函数
- 由于静态成员函数不属于某一对象,因此它没有this指针。
- 静态成员函数专门用来访问静态数据成员
14.9 对象的动态构建和释放
- 用new运算符动态地分配内存后,将返回一个指向该对象的指针值
- (自己搜的)delete pt和delete []pt有什么区别?在构建了一个对象数组的时候,如果delete pt,只有数组的第一个元素会调用析构函数;如果delete []pt,数组的所有元素都会调用析构函数,避免内存泄漏。总之,如果是new[],就用delete []。
- (百度)什么叫内存泄漏?内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
- (概念辨析)内存溢出又是什么?内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用;比如申请了一个int,但给它存了long才能存下的数。
14.10 对象的赋值和复制
- 对象的赋值:对已经有的对象进行赋值
- 对象的复制(拷贝)(定义+赋值):构造新的对象的同时进行赋值,会调用特殊的构造函数:复制(拷贝)构造函数,它的特殊性在于,它的参数是本类对象。
- 复制(拷贝)构造函数的声明:A(A &a);或者A(A const &a);
- 什么时候调用复制(拷贝)构造函数?
- 新建立对象并且要用一个已有对象对其进行初始化的时候
- 调用一个参数为类的对象的函数的时候。这时候会建立形参,该形参为实参的拷贝,为保证值的完全相同,会调用复制(拷贝)构造函数。注意如果题目是否有在拷贝构造函数上做手脚!当然最后首先先识别那个玩意是复制(拷贝)构造函数。(理论山不识别也行。但你水平够么)
- 当一个函数的返回值是一个类的对象的时候。在函数调用完毕,要将返回值带回函数调用处时,需要将一返回值的对象复制给一个临时的无名对象,再把这个无名对象的值赋值给函数的调用处。也就是:返回值对象---复制--->临时的无名对象---赋值--->调用处的对象。
- (网上搜的)当类中有指针类型时,依靠默认的拷贝构造函数的方法,已经无法满足我们的需求(这时候两个指针会指向同一片内存空间,如果delete的话会delete两次!叫作浅拷贝),必须定义一个特定的拷贝构造函数,即不仅可以进行数据的拷贝,也可以为成员分配内存空间,实现真正的拷贝,也叫做深拷贝,这就是深拷贝构造函数。
14.11 友元和友元类
14.11.1 友元函数
- 友元函数声明为private还是public?友元函数是该类的外部函数,不受类的声明区域的影响,因此都可以。
14.11.2 友元类
- 友元类是单向的,不是双向的。
如果把每一个小细节都不放过,或许我可以学的很好吧。
之前确实是迷迷糊糊地学下来了,但是这些知识当时都是第一次接受,也没有复习,所以很多边边角角都是空白的。现在回过头来再缝缝补补,感觉好了很多,有些当时觉得困惑的问题也解决了。复习、巩固、总结,很重要呐。
所以,以考试为导向的学习,对于学生来讲,真的一无是处吗?