学生类别______________考试日期______________ 院系_______________一、填空(共 15 分,每空 1 分)1、编译时的多态性是通过 函数重载、运算符重载、模板 来实现。2、面对对象的四个基本特性是 抽象 、 多态 、 继承 和 封装 。3、假定 AB 为一个类,则执行“C a(2), &p=a, c[1], *b=c;”语句时调用该类构造函数的次数为 2 。4、C++类成员访问属性 public 、 private 、 protected 三种类型。 5、非成员函数应声明为类的__ 友元 ___ 函数才能访问这个类的 private 成员。6、要实现动态联编,必须通过基类指针或 引用 来调用虚函数实现。7、在用 class 定义一个类时,数据成员和成员函数的默认访问权限是_ 私有 ___ 。8、[]、::、+、= 等四种运算符中,不可重载的运算符是 :: ,可采纳友元函数重载的运算符是 + 。9、成员函数中有 纯虚函数 的类不能用来实例化对象。2025 年 1 月 19 日二、问答题(共 35 分,每小题 5 分)1.阐述为何在类的派生中要引入虚基类?答案: 当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性。而且在派生类中会保留这个间接共同基类数据成员的多个同名成员。为了消除访问的二义性,同时减少成员冗余,C++中引入虚基类来解决。2.简述带虚基类和非虚基类的多继承派生类构造函数调用顺序。答案: 多继承基类构造函数初始化按虚基类优先,非虚基类,子对象,派生类自身构造函数顺序调用进行初始化,同类按出现先后顺序调用。只执行最后的派生类调用虚基类的构造函数,忽略虚基类其他派生类调用虚基类构造函数。具体顺序如下:(1)按继承虚基类的顺序调用虚基类的构造函数;(2)按继承非虚基类的顺序调用非虚基类的构造函数;(3)按声明成员对象的顺序调用其构造函数;(4)调用派生类自己的构造函数。3.写出下面程序的运行结果4 外部对象 g_glb_Obj[构造]5 外部静态对象 g_sta_Obj[构造]6 main 内动态分配对象 m_all_Obj[构造]7 main 内调用 fun 函数1 fun 内: cal12 fun 内静态对象 fun_sta_Obj[构造]3 fun 内自动对象 fun_Obj[构造]3 fun 内自动对象 fun_Obj[析构]1 fun 内: cal23 fun 内自动对象 fun_Obj[构造]3 fun 内自动对象 fun_Obj[析构]6 main 内动态分配对象 m_all_Obj[析构]2 fun 内静态对象 fun_sta_Obj[析构]5 外部静态对象 g_sta_Obj[析...