void trans(student &s) {int i=s.deg/10; switch(i) {case 9:
strcpy(s.level, \优\case 8:
strcpy(s.level,\良\case 7:
strcpy(s.level,\中\case 6:
strcpy(s.level,\及格\default:
strcpy(s.level,\不及格\} }
void show(student &s)
{cout< void main() { student st[]={student(\张三\李四\王五 \孙六\process p; cout<<\结 果:\姓名\成绩\等级\for(int i=0;i<4;i++) { p.trans(st[i]); p.show(st[i]);} } 六、程序设计题(本大题共1小题,共10分) 1. 已定义一个Shape抽象类,在此基础上派生出矩形Rectangle和圆形Circle类,二者都有 GetPerim()函数计算对象的周长,并编写测试main()函数。 class Shape {public: Shape(){} ~Shape(){} virtual float GetPerim()=0; } 一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中 只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无 分。 1. 静态成员函数没有() A. 返回值 B. this指针 C. 指针参数 D. 返回类型 2. 假定AB为一个类,则执行“AB a(2), b[3],*p[4];”语句时调用该类构造函数的次数 为() A. 3 B. 4 C. 5 D. 9 3. 有关多态性说法不正确的是() A. C++语言的多态性分为编译时的多态性和运行时的多态性 B. 编译时的多态性可通过函数重载实现 C. 运行时的多态性可通过模板和虚函数实现 D. 实现运行时多态性的机制称为动态多态性 4. 假定一个类的构造函数为“A(int i=4, int j=0) {a=i;b=j;}”, 则执行“A x (1);”语 句后,x.a和x.b的值分别为() A. 1和0 B. 1和4 C. 4和0 D. 4和1 5. 类MyA的拷贝初始化构造函数是 () A. MyA() B. MyA(MyA*) C. MyA(MyA&) D. MyA(MyA) 6. 在C++中,函数原型不能标识() A. 函数的返回类型 B. 函数参数的个数 C. 函数参数类型 D. 函数的功能 7. 友元关系不能() A. 提高程序的运行效率 B. 是类与类的关系 C. 是一个类的成员函数与另一个类的关系 D. 继承 8. 实现两个相同类型数加法的函数模板的声明是() A. add(T x,T y) B. T add(x,y) C. T add(T x,y) D. T add(T x,T y) 9. 在int a=3,int *p=&a;中,*p的值是() A. 变量a的地址值 B. 无意义 C. 变量p的地址值 D. 3 10. 下列不是描述类的成员函数的是() A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数 11. 如果从原有类定义新类可以实现的是() A. 信息隐藏 B. 数据封装 C. 继承机制 D. 数据抽象 12. 下面有关类说法不正确的是() A. 一个类可以有多个构造函数 B. 一个类只有一个析构函数 C. 析构函数需要指定参数 D. 在一个类中可以说明具有类类型的数据成员 13. 在函数定义中的形参属于() A. 全局变量 B. 局部变量 C. 静态变量 D. 寄存器变量 14. 下列有关重载函数的说法中正确的是() A. 重载函数必须具有不同的返回值类型 B. 重载函数参数个数必须相同 C. 重载函数必须有不同的形参列表 D. 重载函数名可以不同 15. this指针存在的目的是() A. 保证基类私有成员在子类中可以被访问 B. 保证基类保护成员在子类中可以被访问 C. 保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码 D. 保证基类公有成员在子类中可以被访问 16. 关于new运算符的下列描述中,错误的是() A. 它可以用来动态创建对象和对象数组 B. 使用它创建的对象或对象数组可以使用运算符delete删除 C. 使用它创建对象时要调用构造函数 D. 使用它创建对象数组时必须指定初始值 17. 已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确 的是() A. A1.p=5; B. A1->p=5; C. A1.*p=5; D. *A1.p=5; 18. 以下基类中的成员函数表示纯虚函数的是() A. virtual void tt()=0 B. void tt(int)=0 C. virtual void tt(int) D. virtual void tt(int){} 19. C++类体系中,不能被派生类继承的有() A. 常成员函数 B. 构造函数 C. 虚函数 D. 静态成员函数 20. 静态成员函数不能说明为() A. 整型函数 B. 浮点函数 C. 虚函数 D. 字符型函数 二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案 。错填、不填均无分。 1. 假设int a=1,b=2;则表达式(++a/b)*b--的值为___。 2. 抽象类中至少要有一个___函数。 3. 一个抽象类的派生类可以实例化的必要条件是实现了所有的___。 4. 下面程序的输出结果为___。 #include void main() {int num=2,i=6; do {i--; num++; }while(--i); cout< 5. 静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是___。 6. 在用C++进行程序设计时,最好用___代替malloc。 7. 由const修饰的对象称为___。 8. 在C++程序设计中,建立继承关系倒挂的树应使用___继承。 9. 基类的公有成员在派生类中的访问权限由___决定。 10. 不同对象可以调用相同名称的函数,但执行完全不同行为的现象称为___。 11. this指针始终指向调用成员函数的___。 12. 预处理命令以___符号开头。 13. 类模板用来表达具有___的模板类对象集。 14. C++程序的源文件扩展名为___。 15. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是___的头文件。 16. vector类中向向量尾部插入一个对象的方法是___。 17. C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取___方式。 18. 语句序列 ifstream infile; infile.open(“data.dat”); 的功能可用一个语句实现,这个语句是___。 19. 如果要把类B的成员函数void fun()说明为类A的友元函数,则应在类A中加入语句___。 20. 在编译指令中,宏定义使用___指令。 三、改错题(本大题共5小题,每小题2分,共10分)下面的类定义中有一处错误,请用下 横线标出错误所在行并给出修改意见。 1. #include #include A(const char *na){strcpy(name,na);} private: char name[80]; }; class B:public A { public: B(const char *nm):A(nm){} void show(); }; void B::show() { cout<<\} void main() { B b1(\b1.show();