1、面向对象程序设计C+A卷答案题号一二三四五总分核分人得分得分评卷人一、选择题(每题2分,共20分)1、已知函数f的原型是:void f(int *a, long &b); 变量v1、v2的定义是:int v1; long v2;,正确的调用语句是( C )。 A) f(v1, &v2); B) f(v1, v2); C) f(&v1, v2); D) f(&v1, &v2);2、下列描述中,( C )是错误的。A) 内联函数主要解决程序的运行效率问题B) 内联函数的定义必须出现在内联函数第一次被调用之前C) 内联函数中可以包括各种语句D) 对内联函数不可以进行异常接口声明3、下列关于类和对象的
2、叙述中,错误的是( A )。 A) 一个类只能有一个对象B) 对象是类的具体实例C) 类是对某一类对象的抽象D) 类和对象的关系是一种数据类型与变量的关系4、( C )不是构造函数的特征。 A) 构造函数的函数名与类名相同 B) 构造函数可以重载 C) 构造函数不可以设置缺省参数 D) 构造函数无须指定类型说明5、友元的作用是(A)。A) 提高程序的运用效率 B) 加强类的封装性C) 实现数据的隐藏性 D) 增加成员函数的种类6、下列关于运算符重载的叙述中,正确的是( B )。A) 通过运算符重载,可以定义新的运算符B) 有的运算符只能作为成员函数重载C) 若重载运算符+,则相应的运算符函数名
3、是+D) 重载二元运算符时,必须声明两个形参7、设置虚基类的目的是( B )。A) 简化程序 B) 消除二义性 C) 提高运行效率 D) 减少目标代码8、已知在一个类体中包含如下函数原型:Volumeoperator-(Volume)const;,下列关于这个函数的叙述中,错误的是( B )。A) 这是运算符-的重载运算符函数B) 这个函数所重载的运算符是一个一元运算符C) 这是一个成员函数D) 这个函数不改变类的任何数据成员的值9、关于子类型的描述中,(A)是错误的。A) 子类型就是指派生类是基类的子类型;B) 一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型;C) 在
4、公有继承下,派生类是基类的子类型;D) 子类型关系是不可逆的。10、下列是模板声明的开始部分,其中正确的是( C )。 A)template B)template C)template D)template得分评卷人二、判断题(每题1分,共10分)1、C+语言引入类主要起两个作用:数据封装和类型定义。2、只要是类M继承了类N,就可以说类M是类N的子类型。3、构造函数可以声明为虚函数。4、多继承情况下,派生类的构造函数的执行顺序取决于成员初始化列表中的顺序。5、重载函数必须有不同的参数列表。6、用new动态分配的内存是在堆中分配的,而不是在栈中分配的。7、关系运算符可以用来比较两个字符的大小,也
5、可用来比较两个字符串的大小。8、如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。9、通过使用不同的类型参数,函数模板可以生成不同类型的函数。10、在私有继承中,基类中只有公有成员对派生类是可见的。得分评卷人三、填空题(每题2分,共20分)1、任何类中允许有三种访问权限的数据,这三种访问权限分别是public、private、protected ,默认访问权限为 private(或私有) 。2、类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。classSamplepublic:Sample(intdata=0);private:i
6、ntdata;Sample:Sample(intdata) this-data=data; 3、设px是指向一个类动态对象的指针变量,则执行“deletepx”语句时,将自动调用该类的 析构 函数。4、当一个函数或一个类希望能够直接访问另一个类中的非公用成员时,应该将该函数或该类声名为另一个类的 友元函数 或 友元类 。5、在MyClass类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。MyClass&MyClass:operator=(constMyClass&rhs)if(this = = &rhs)return*this;value=rhs.value;return*t
7、his;6、设A为test类的对象且赋有初值,则语句testB(A);表示 用已经存在的对象A初始化正在被创建的同类新对象B 。7、函数重载时要求同名函数的参数 类型 或 个数 不同,否则无法确定是哪个函数。8、从实现的角度划分,C+所支持的两种多态性分别是 编译 时的多态性和运行时的多态性。实现运行时多态,要使用虚 函数。9、带有 纯虚函数 的类称为抽象类,抽象类的特征是不能声明一个抽象类的对象 ,但可以声明一个抽象类的指针或引用。10、一个 类模板允许用户为类定义一种模式,使得类中某些数据成员、某些成员函数的参数和返回值能取任意数据类型。得分评卷人四、程序阅读题(每题5分,共10分)1、写
8、出执行下面程序的输出结果。9SS9S#includeusingnamespacestd;classAinta;public:A( ): a(9)virtualvoidprint( )constcouta;classB: publicAcharb;public:B( )b=S;voidprint( ) constcoutprint();show(d1);show(d2);return0;2、写出执行下面程序的输出结果。#includeusingnamespacestd;class Partpublic: Part() coutclass Partendl; ;class A public:A(c
9、har *s) coutsendl; A() ; class B: virtual public A public: B(char *s1, char *s2):A(s1) couts2endl; ; class C: virtual public A public: C(char*s1,char *s2):A(s1) couts2endl; ; class D: public C, public B Part p; public: D(char *s1, char *s2,char *s3, char *s4):B(s1,s2), C(s1,s3), A(s1) couts4endl; ;
10、int main() D *p=new D(class A, class B, class C, class D);delete p;return 0;结果:class Aclass Cclass Bclass Partclass D得分评卷人五、程序改错题(每个错误2分,共10分)有一个源程序文件proj.cpp,其中编号为、的语句有错误,请修改这些错误。源程序文件proj.cpp清单如下:#include using namespace std;#include class CBook private:char *p_book;public: void CBook(const char *
11、p_val) - 去掉voidp_book = new charstrlen(p_val)+1;strcpy(p_book, p_val);void print( ) const;CBook( ) delete p_book; - 去掉;int main()char book_title60;CBook *p_book_obj; cout book_title;CBook abook; - 改成CBook abook(book_title);p_book_obj = &abook;p_book_obj.print();- 改成p_book_obj-print();return 0; void
12、print( ) const - 改成void CBook:print( ) const cout p_book endl; 得分评卷人六、程序设计题(共30分)1、(15分)编写一个实现两个数交换的函数模板swap,然后使用该函数模板再编写一个对具有n个数组元素(通用类型)的数组采用冒泡排序算法进行排序的函数模板。2、(15分)编写一个程序计算“三角形(triangle)、正方形(square)、圆形(circle)”三种图形的面积,要求:(1)抽象出一个基类Base,在其中说明一个虚函数用来求面积;(2)利用派生类定义三角形、正方形、圆形;(3)编写主函数并测试。1、#include us
13、ing namespace std;template void swap(T &a, T &b) T temp;temp = a; a = b; b = temp;template void bubbleSort(T a, int n) int i, j; for (i=1; i n; i+) for (j=0; j aj+1) swap(aj, aj+1); template void print(T1 a, int n) for (int i=0; i n; i+) cout ai ; cout endl; int main() int a = 2, 3, 1, 6, 43, 22; do
14、uble b = 2.3, 3.2, 1.6, -6.0, 4.3, 2.2; print(a, 6); bubbleSort(a, 6);print(a, 6); print(b, 6); bubbleSort(b, 6); print(b, 6); return 0;2、classBasepublic:doublearea(doubles=0);classTriangle: publicbasedoubleD,H;public:Triangle(doubled=0,doubleh=0)D=d;H=h;doublearea()doubles;s=(D*H)/2;returns;voiddis
15、play()cout三角形的底和高:D H endl;cout三角形的面积:area()endl; ;classSquare: publicbasedoubleL;public:Square(doublel=0)L=l;doublearea()doubles;s=L*L;returns;voiddisplay() cout正方形的边长为:Lendl;cout正方形的面积为:area()endl;classCircle: publicbasedoubleR;public:Circle(doubler=0)R=r;doublearea()doubles;s=3.14*R*R;returns;voiddisplay() cout圆的半径:Rendl;cout圆形的面积为:area()endl; ;int main() Shape *p=NULL; Triangle t(3,4,5); Square s(2);Circle c(3);p=&t;cout三角形的面积为:area()endl; p=&s;cout正方形的面积为:area()endl;p=&c;cout圆的面积为:area()endl; return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1