1)隐藏数据的原因:维护对象的完整性;直接访问定义对象的值会破坏面向对象编程的整体理念;OOP(Object Oriented Programming,面向对象编程)是根据对象来编程,而不是根据组成对象的位来编程。
2)类的构造函数的主要作用是在创建类对象时,为其所有数据元素赋予并验证初始值,并不需要或不允许有返回类型。
3)构造函数的一个主要目的是确保对象的所有数据成员都设置为合适的初始值。
4)应该确保可以通过成员函数设置或者修改类的私有数据成员。
5)如果把一个对象指定为const,就是告诉编译器不要修改它。
6)不是构造函数分配了内存空间,而是调用构造函数的代码分配了内存空间。
7)如果在对象中动态分配了内存,就必须实现该类的析构函数。
注1:通过析构函数来确保能够正常释放动态分配的内存空间,以避免内存泄露。
8)C++中常用虚函数调用来描述多态性。
注1:虚函数是指在基类中被声明为virtual,并在一个或者多个派生类中被重新定义的成员函数;纯虚函数参见11)。
9)把类描述为多态性,意味着它是一个至少包含一个虚函数的派生类。
10)使用对象调用虚函数总是进行静态解析。只有通过指针或引用调用虚函数,才会进行动态解析。
注1:静态解析发生在编译阶段;动态解析发生在运行阶段。
11)基类中的虚函数在函数声明的最后加上=0,就变成了纯虚函数。
12)包含纯虚函数的类称为抽象类。抽象类不能创建对象,在该类的任何派生类中,必须定义所继承的所有纯虚函数,否则其派生类也是抽象类,同样不能创建对象。
13)纯虚函数的主要作用是允许函数的派生类版本进行多态性调用。纯虚函数通常没有实现代码。
14)多态性是通过指针或引用调用函数,而且调用是动态解析的,即在程序执行时确定调用哪个函数。
15)若基类包含虚函数,就应该把基类的析构函数声明为virtual,以确保为动态创建的派生类对象选择正确的析构函数。
16)函数重载属于程序编译时实现的多态性;而程序运行时的多态性,则通过虚函数实现。
注1:函数重载是指在统一范围内声明数个功能相似的同名函数,其返回值相同,但是形参不同(参数的个数、类型或顺序)。
17)经过编译的C/C++的程序占用的内存划分:
a. 栈区——由编译器自动分配和释放,存放函数的参数值、局部变量值等,甚至函数的调用过程都是用栈来完成的;
注1:栈(Stack)是指操作系统在建立某个进程或者线程(在支持多线程的操作系统中是线程)时,为这个进程或者线程建立的存储区域。
b. 堆区——一般由程序员手动申请和释放;
注:2:堆(Heap)是指程序运行时申请的动态内存。
c. 全局区(静态区)——全局变量和静态变量的存储是放在一块儿的,初始化的全局变量和静态变量在一块儿区域,未初始化的在相邻的另一块儿区域,程序结束后由系统释放空间;
d. 文字常量区——存储常量字符串,程序结束后由系统释放空间;
e. 程序代码区——存放函数体的二进制代码。
18)各种排序算法的稳定性与时间/空间复杂度:冒泡/稳定/O(n2)/1;插入/稳定/O(n2)/1;希尔/不稳定/O(n2)/1;选择/不稳定/O(n2)/1;快速/不稳定/O(nLogn)/O(Logn);堆/不稳定/O(nLogn)/1;归并/稳定/O(nLogn)/O(n)。