- --- --- --- -- -- --- -- -- --- ---- 学号:------ --- -- -- --- -- -- --- -- -- -- 线 - : ------- 姓名--- --学生-- --- -- -- --- ---- 封 --- ------ 年级: --- -- -- --- --- --- -- -- --- -- 密 -- 专业:---- --- --- --- -- -- --- -- -- ----- : )----- --- 院(系----- -----
华中师范大学2009–2019学年第二学期 期末考试试卷(A卷) 课程名称: 面向对象程序设计 课程编号: 任课教师: 题型 选择题 填空题 程序改错题 程序分析题 程序设计题 总分 分值 40 15 10 15 20 100 得分 得分 评阅人 一、单项选择题:(共20题,每小题2分,共40分) 1. C++程序运行时,总是起始于( )。 A.程序中的第一条语句 B.预处理命令后的第一条语句 C.main( ) D.预处理指令 2. 设i为int型,f为float型,则10 + i+ 'f'的数据类型为( )。 A.int B.float C.double D.char 3. 若变量a是int类型,执行a='A'+1.6;正确的叙述为( )。 A.a的值是字符C B.a的值是浮点型 C.不允许字符型数与浮点型数相加 D.a的值是'A'的ASCII码值加上1 4. 以下程序段( )。 x=-1; do {x=x*x;} while (!x); A.是死循环 B.循环执行1次 C.循环执行2次 D.语法错 5. 执行语句序列 int n; cin>>n; switch(n) { case 1: case 2:cout<<’1’; case 3: case 4:cout<<’2’;break; default:cout<<’3’; } 时,若键盘输入1,则屏幕显示 A.1 B.2 C.3 D.12
6. 下列函数原型声明中错误的是( ) A.void Fun(int x=0,int y=0); B.void Fun(int x,int y); C.void Fun(int x,int y=0); D.void Fun(int x=0,int y); 7. 为了取代C中带参数的宏,在C++中使用( ) A.重载函数 B.内联函数 C.递归函数 D.友元函数 8. 设有数组定义:char array [ ] = \"China\"; 则数组array所占的空间为( )。 A.4个字节 B.5个字节 C.6个字节 D.7个字节 9. 要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为( )。 A.const char *p=\"ABCD\"; B.char const *p=\"ABCD\"; C.char *const p=\"ABCD\"; D.const char * const p=\"ABCD\"; 10. 对于指向同一块连续内存的两个指针变量之间,不能进行的运算是( )。 A.< B.= C.+ D.– 11.在建立类的对象时( )。 A.只为每个对象分配用于保存数据成员的内存 B.只为每个对象分配用于保存函数成员的内存 C.为所有的对象的数据成员和函数成员分配一个共享的内存 D.为每个对象的数据成员和函数成员同时分配不同内存 12.以下叙述中不正确的是( )。 A.动态分配的内存要用delete释放 B.局部auto变量分配的内存在函数调用结束时释放 C.局部字符串常量、静态变量的内存在函数调用结束时释放 D.全局变量的内存在程序结束时释放 13. 下列程序段的运行结果为( )。 #define ADD(x) x+x int main() { int m=1, n=2, k=3; int sum=ADD(m+n)*k; cout<<\"sum=\"<---------------------------------------------------------线 ----------------------------- 封 ----------------------------------密 ------------------------------------------- ------ 15. 类的构造函数被自动调用执行的情况是在定义该类的( )。 A.成员函数时 B.数据成员时 C.对象时 D.友元函数时 16. 已知p是一个指向类Sample数据成员m的指针,s是类 Sample的一个对象。如果要给m赋值为5, 正确的 是( )。 A.s.p=5; B.s->p=5; C.s.*p=5; D.*s.p=5; 17. 关于类和对象的说法不正确的是( )。 A.对象是类的一个实例 B.一个类只能有一个对象 C.一个对象只能属于一个具体的类 D.类与对象的关系和数据类型与变量的关系是相似的 18. 下面对派生类的描述中,错误的是( )。 A.一个派生类可以作为另外一个派生类的基类 B.派生类至少有一个基类 C.派生类的成员除了它自己的成员外,还包含了它的基类的成员 D.派生类中继承的基类成员的访问权限到派生类中保持不变 19. 求string类串S长度的表达式为( )。 A.S. capacity( ) B.sizeof(S) C.strlen(S) D. S.length( ) 20. 下列叙述错误的是( )。 A.throw语句须书写在try语句块中 B.throw语句必须在try语句块中直接运行或通过调用函数运行 C.一个程序中可以有try语句而没有throw语句 D.throw语句抛出的异常可以不被捕获 得分 评阅人 二、填空题题:(共20空,每空1分,共20分) 21. 对象与对象之间通过 进行相互通信。 22.相互关联的各个类之间的关系主要分为 关系和 关系。 23.基类的对象可以作为派生类的对象使用,这称为 。 24. 在运行时才确定的函数调用称为动态联编,它通过 来实现。 25. C++的静态多态性是通过 实现的。 26. 在STL中, 如同一个特殊的指针(用以指向容器中某个位置的数据元素 27. 就是将某个底层顺序容器的转换为另一种容器。即以顺序容器作为数据存储结构,将其转换为一种某种特定操作特性的新容器。 28.STL中体现了泛型化程序设计的思想,它提倡使用现有的模板程序代码开发应用程序,是一种 技术。29.头文件iostream中定义了4个标准流对象 , , , 。 30.C++标准库中提供了 类,为异常处理提供了方便。 得分 评阅人 三、程序改错题:(共2题,每题5分,共10分) 31. 下列程序中如有错误与不妥当之处请指出。 m=0 m=10 #include using namespace std; class c0 { int m; public: void print(){ cout<<\"m=\"< using namespace std; class A{ public:A(const char *nm){strcpy(name,nm);} private:char name[80]; }; class B:public A{ public:B(const char *nm):A(nm){ } void PrintName( )const; }; void B::PrintName( )const{ cout<<\"name:\"<int main( ){ B b1(\"wang li\"); b1.PrintName( ); return 0; } ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 --------------------------------------------------------- 错误原因: 改正: 得分 33. 评阅人 四、程序分析题:(共3题,共15分) #include using namespace std; namespace mynamespace { int flag=10; } namespace yournamespace { int flag=100; } int main() { } int flag=1000; using namespace yournamespace; cout< using namespace std; class A{ public: A(){cout<<\"A\";} ~A(){cout<<\"-A\";} }; class B:public A{ A* p; public: B(){cout<<\"B\"; p = new A();} ~B(){cout<<\"-B\"; delete p;}
}; int main(){ B obj; return 0; } 运行结果为: 35. #include using namespace std; class A { public: virtual void func(){cout<<\"func in class A\"<< endl;} }; class B { public: virtual void func(){cout<<\"func in class B\"<< endl;} }; class C: public A, public B { public: void func(){cout<<\"func in class C\"<得分 ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 --------------------------------------------------------- 评阅人 五、程序设计题:(共2题,共20分) 36.定义并描述一个人员类Person,它派生出学生类Student和教师类,学生类和教师类又共同派生出在职读书的教师类Stu_Teach。人员类有姓名、性别、身份证号、出生年月等信息;学生类有学号、成绩等信息;教师类有职称等信息。(8分) 37. 设计并测试一个描述队列(Queue)的类模板,该类模板模仿一个普通的等待队列:插入在线性结构的末尾进行,删除在该线性结构的另外一端进行。(12分)