Untitled Document

二、 问答题（每小题5分，共20分）
1． 在定义拷贝构造函数时，为什么通常还要定义一个重载的赋值运算符？
解答要点：拷贝构造函数是用一个对象初始化另一个对象时调用，定义了拷贝构造函数通常涉及到对象内有指针成员，需要定义拷贝构造函数复制指针所指向的内存单元。对象赋值也有同样的问题，如果要将对象指针所指向的内存单元也赋给另一个对象，就必须重载赋值运算符。
2． 简述局部作用域、全局作用域和类作用域的异同。
解答要点：局部作用域只在局部块内有效，如在一个函数内或在一个复合语句内，它的生存期也在该块内；全局作用域对整个应用程序都有效，它的生存期与应用程序一样长；类作用域在类内，类的成员函数可以访问类的所有成员，而在类外，只能访问类的共有成员，类成员定义的次序与其作用的范围没有关系。
3． 虚函数是否一定要有virtual关键字？什么叫纯虚函数和抽象类？多态调用需要满足怎样的条件？
解答要点：不一定，派生类覆盖基类的成员函数时，没有virtual关键字，也是虚函数；纯虚函数没有实现，它供派生类覆盖，纯虚函数的一般定义形式为：
virtual 返回类型 函数名（参数表） = 0；
至少含有一个纯虚函数的类称为抽象类，抽象类不能定义对象，只能作为基类；
多态调用需要满足的条件：
被调用的成员函数是虚函数
用指针或引用调用虚函数
4． 数组和链表是两种重要的线性数据结构，使用链表有什么优点？
解答要点：数组需要一个大的、连续的存储单元，而链表是由一个个结点的小存储单元组成的。
链表便于数据的插入和删除。在数组中，要插入一个元素，需要将后面的元素往后移，要删除一个元素要将后面的元素往前移，效率很低，链表可以克服这个缺点。