3、如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。
41. 解释堆和栈的区别。
答:栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
42. 一个类的构造函数和析构函数什么时候被调用,是否需要手工调用
答:构造函数在创建类对象的时候被自动调用,析构函数在类对象生命期结束时,由系统自动调用。
43. 何时需要预编译:
答:总是使用不经常改动的大型代码体。
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
44. 多态的作用?
答:主要是两个:
1. 隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
2. 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用
45. 虚拟函数与普通成员函数的区别?内联函数和构造函数能否为虚拟函数?
答案:区别:虚拟函数有virtual关键字,有虚拟指针和虚函数表,虚拟指针就是虚拟函数的接口,而普通成员函数没有。内联函数和构造函数不能为虚拟函数。
46. 构造函数和析构函数的调用顺序 析构函数为什么要虚拟
答案:构造函数的调用顺序:基类构造函数—对象成员构造函数—派生类构造函数;析构函数的调用顺序与构造函数相反。析构函数虚拟是为了防止析构不彻底,造成内存的泄漏。
47. C++中类型为private的成员变量可以由哪些函数访问
答:只可以由本类中的成员函数和友元函数访问
48. 请说出类中private,protect,public三种访问限制类型的区别
答:private是私有类型,只有本类中的成员函数访问;protect是保护型的,本类和继承类可以访问;public是公有类型,任何类都可以访问.
49. 类中成员变量怎么进行初始化?
答:可以通过构造函数的初始化列表或构造函数的函数体实现。
50. 在什么时候需要使用“常引用”?
答:如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。