搜索
您的当前位置:首页2011级C++面向对象程序设计(A卷)

2011级C++面向对象程序设计(A卷)

时间:2020-09-01 来源:乌哈旅游
厦门理工学院试卷 20 11-20 12 学年 第 2 学期 考 生 信 息 栏 计算机科学与技术 系 专业 2011 级 班级 姓名 学号 课程名称 C++面向对象程序设计 试卷 卷别 A √ B □ 专业 2011 级 班级 装 订 线 考试 闭卷 √ 方式 开卷 □ 本试卷共 四 大题(8页),满分100分,考试时间120分钟。 请在答题纸上作答,在试卷上作答无效。 一、选择题:(本题共15小题,每题2分,共30分) 1.下面关于C++的特点中描述不正确的是( )。 A.C++是C语言的超集,大多数C程序在不用修改的情况下就可以在C++的集成环境中运行或调试 B.C++是面向对象的程序设计语言 C.C++中没有结构化编程的语句 D.C++的执行效率很高 2.重载函数在调用时选择的依据,下列( )是错误的。 A.函数名字 B. 函数的返回类型 C.参数个数 D. 参数的类型 3.在C++中,关于下列设置默认参数值的描述中,( )是正确的。 A.不允许设置默认参数值 B. 在指定了默认值的参数右边,不能出现没有指定默认值的参数 C.只能在函数的定义性声明中指定参数的默认值 D. 设置默认参数值时,必须全部都设置 4.在声明类时,下面的说法正确的是( )。 A.可以在类的声明中给数据成员赋初值 B. 数据成员的数据类型可以是register C.private、public、protected可以按任意顺序出现 D. 没有用private、public、protected定义的数据成员是公有成员 第 1 页 共 8 页

5.在多层派生构造函数中,派生类构造函数的执行顺序是( )。 A.基类构造函数→成员对象构造函数→派生类构造函数。 B.成员对象构造函数→基类构造函数→派生类构造函数。 C.派生类构造函数→成员对象构造函数→基类构造函数。 D.基类构造函数→派生类构造函数→成员对象构造函数。 6.在公有派生时,派生类中定义的成员函数只能访问原基类的( )。 A.私有成员、保护成员和公有成员 B.保护成员和私有成员 C.公有成员和保护成员 D.公有成员和私有成员 7.下列关于构造函数的描述中,错误的是( ) A.构造函数可以设置默认参数。 B.构造函数在定义类对象时自动执行。 C.构造函数可以是内联函数。 D.构造函数不可以重载。 8.下列关于友元函数的描述中,正确的说法是( ) A.友元函数是独立于当前类的外部函数。 B.一个友元函数不能同时定义为两个类的友元函数。 C.友元函数必须在类的外部定义。 D.在外部定义友元函数时,必须加关键字friend。 9.下列关于运算符重载的描述中,正确的是( )。 A.运算符重载可以改变运算符的操作数的个数 B.运算符重载可以改变优先级 C.运算符重载可以改变结合性 D.运算符重载不可以改变语法结构 10.重载输入运算符“>>”必须使用的原型为( )。 A.istream& operator>>(istream&, <类名>&); B.istream& operator>>(istream, <类名>); C.istream& operator>>(istream, <类名>&); D.<类名>operator>>(istream&, <类名>&); 11.语句ofstream outf(“Test.DAT”, ios::app);的功能是建立流对象outf,并试图打开文件Test.DAT与outf关联,而且( )。 A.如果文件存在,打开失败;如果文件不存在,建立一个新文件 B.如果文件存在,将文件指针定位于文件尾;如果文件不存在,打开失败 C.如果文件存在,将文件指针定位于文件尾;如果文件不存在,建立一个新文件 D.如果文件存在,将其置为空文件;如果文件不存在,打开失败 12.下面的符号中不属于C++关键字的是( )。 A.friend B.byte C.continue D.namespace 13.如果类A被说明成类B的友元,则( )。 A.类A的成员即类B的成员 B.类B的成员即类A的成员 C.类A的成员函数不得访问类B的成员 D.类A的成员函数可以访问类B的成员 第 2 页 共 8 页

14.下列运算符不能重载为友元函数的是( )。 A.= () [] -> B.+ - ++ -- C.> < >= <= D.+= -= *_= /= 15.关于this指针的说法正确的是( )。 考 生 信 息 栏 系 专业 级 班级 姓名 学号 A.任何与类相关的函数都有this指针 B.类的成员函数都有this指针 C.类的友元函数都有this指针 D.类的非静态成员函数才有this指针 二、程序填空题:(本题共2小题10空,每空2分,共20分) 1.阅读下列程序,根据注释在空格处填写正确的语句。 #include using namespace std; class MyArray{ public: MyArray(int leng); ~MyArray(); void Input(); void Display(string); protected: int *alist; int length; }; MyArray::MyArray(int leng) { alist= (1) ; //动态分配长度为leng个int型字节的内存 length=leng; cout<<\"MyArray类对象已创建\"<void MyArray::Input() { cout<<\"请从键盘输入\"<>*p; //从键盘上向数组alist输入数据 } int main() { MyArray a(5); (4) ; //调用数据输入函数 (5) ; //调用数据打印函数 return 0; } 2.算法功能:输入一个四位正整数,将它们倒排。例如输入1234,输出4321。 (提示:分别应用/ 求整数部分,%求余数部分。例如7/5=1,7%5=2)。 #include using namespace std; void Reverse(int num, int& num_rev) { //用于存储整数num的4个数字 int a[4]; a[0] = (6) ; //计算中一个四位正整数(1234)num的最高位“1”. a[1] = (7) ; //计算中一个四位正整数(1234)num的次高位“2”. a[2] = (8) ; //计算中一个四位正整数(1234)num的第三位“3”. a[3] = (9) ; //计算中一个四位正整数(1234)num的最低位“4”. //计算该数的倒排后的数num_rev, 如4321 for(int i=0; i<4; i++) { num_rev *= 10; num_rev += a[3-i]; } } int main() { int num_input; //代表程序中输入的一个四位正整数, 如1234 int num_output=0; //代表倒排后的正整数, 如4321 cout<<\"请输入一个4位整数:\"; cin>>num_input; (10) ; //调用倒排函数Reverse cout<<\"倒排后的正整数为:\"<< num_output <第 4 页 共 8 页

三、程序阅读题:(本题共4小题,每题5分,共20分) 1.写出下列程序的运行结果 #include using namespace std; class Coordinate{ public: Coordinate(int x1,int y1) { x=x1; y=y1; } Coordinate(Coordinate &p); ~Coordinate() { cout<<\"Destructor is called\\n\"; } int getx() { return x; } int gety() { return y; } private: int x,y; }; Coordinate::Coordinate(Coordinate &p) { x=2*p.x; y=2*p.y; cout<<\"Copy-initialization Constructour is called\\n\"; } int main() { Coordinate p1(3,4); Coordinate p2(p1); Coordinate p3=p2; cout<<\"p3=(\"< using namespace std; class example { public: example(int n) { i=n; cout << \"Constructing\\n\"; } ~example() { cout << \"Destructing\\n\"; } int get_i() { return i; } 第 5 页 共 8 页 考 生 信 息 栏 系 专业 级 班级 姓名 学号 装 订 线 private: int i; }; int sqr_it(example o) { return o.get_i()*o.get_i(); } int main() { example x(10); cout << x.get_i() << endl; cout << sqr_it(x) << endl; return 0; } 3.写出下列程序的运行结果 #include using namespace std; class base1{ public: base1() { cout << \"class base1\" << endl; } }; class base2{ public: base2() { cout << \"class base2\" << endl; } }; class level1: public base2, virtual public base1{ public: level1() { cout << \"class level1\" << endl; } }; class level2: public base2, virtual public base1{ public: level2() { cout << \"class level2\" << endl; } }; class toplevel: public level1, virtual public level2{ public: toplevel() { cout << \"class toplevel\" << endl; } }; int main() { toplevel obj; return 0; }

第 6 页 共 8 页

4.写出下列程序的运行结果 #include using namespace std; template T max(T x, T y) { cout << \"调用模板函数:\"; return x>y?x:y; } int max(int a, int b) { cout << \"调用非模板函数:\"; return a>b?a:b; } int main() { cout << \"较大的整数是\" << max(3, 5) << endl; cout << \"较大的双精度型数是\" << max(1.1, 2.2) << endl; cout << \"较大的字符是\" << max('a','b') << endl; return 0; } 考 生 信 息 栏 系 专业 级 班级 姓名 学号 装 订 线 四、编程题:(本题共3小题,每题10分,共30分) 1、编写完整下列程序(使用友元函数以前缀方式和后缀方式重载运算符“++” )。 class Three{ public: Three(int x=0, int y=0, int z=0); //声明构造函数 void print(); //打印函数 friend Three operator++(Three &); friend Three operator++(Three &, int); private: int i1, i2, i3; }; 。。。。。。 //填写程序段 int main() { Three obj1(4,5,6), obj2(14,15,16); obj1.print(); ++obj1; obj1.print(); obj1++; obj1.print(); cout << endl; 第 7 页 共 8 页

obj2.print(); operator++(obj2); obj2.print(); operator++(obj2, 0); obj2.print(); return 0; } 2、给出下面的抽象基类container。 class container{ protected: double radius; public: container(double radius); virtual double surface_area()=0; virtual double volume()=0; }; 建立3个继承container的派生类cube、sphere与cylinder,让每一个派生类都包含虚函数surface_area()和volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。 【要求】:写出主程序,用于C++的多态性,分别计算边长为1.0的正方体、半径为2.0的球体,以及半径为2.0和高为1.0的圆柱体的表面积和体积。 3、建立一个用来实现求3个数和的类模板(将成员函数定义在类模板的内部),并写出调用此类模板的完整程序。 【要求】:在主程序中,分别计算3个整数(1,2,3)的和,3个双精度数(11.11,22.22,33.33)的和。

第 8 页 共 8 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Top