《C++期末复习试卷A(共7页).doc》由会员分享,可在线阅读,更多相关《C++期末复习试卷A(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上计算机科学与技术信息管理与信息系统 专业面向对象程序设计C+试卷(A卷)(闭卷)班级 姓名 学号 题号一二三四五总分分值1020202525100得分一、判断题:(10分)(共10小题,每小题1分)1. 重载函数必须有不同的参数列表。2. 私有继承中,基类中所有成员在派生类成员函数中都不可以访问。3. 动态绑定的多态性必须通过虚函数实现。4. 友元函数的声明在类体内,它是一种成员函数。5. 在类CDate中的析构函数可以声明为:void CDate();6. 在C+中,只能重载已有的运算符。7. 引用和指针都可作为函数参数。8. 可以在类的构造函数中对静态成员进行初始
2、化。9. 可以用delete释放不是用new运算符分配的内存。10. 内联函数相比普通函数的优点是直接将函数体展开,因此省去函数调用栈的开销。二、单选题:(20分)(共10小题,每小题2分)1. 关键字 _ 说明对象或变量初始化后不会被修改。 A. static B. public C. const D. inline2. C+中,用于解决二义性问题的技术是_。A. 虚函数B. 函数重载C. 静态函数D. 虚继承3. 如果调用带有默认参数的函数时缺少一个参数,则_的默认值就作为这一参数值。 A. 第一个 B. 最后一个 C. 中间一个 D. 以上都不是4. 要让一个类的所有对象具有共同的数据,
3、要使用_。A. 静态数据成员 B. 私有数据成员C. 公有数据成员 D. 保护数据成员5. 已知A是一个自定义的类,请问以下代码调用拷贝构造函数的次数是_。A& f(A* pa)pa = new A();return *pa;int main()A a = f(NULL);return 0;A. 0次B. 1次C. 2次D. 3次6. 假定要对类A的对象a、b和c执行以下操作:c = a+ b;必须要重载加号运算符函数,以下写在A类体内的声明语句哪个能满足要求_。A. operator+ (A& b);B. A operator+ (A& a, A& b);C. friend A operat
4、or+ (A& a, A& b);D. friend A & operator+ ( A& b);7. 如果有int x,*p; float y,*q;则下面操作正确的是_。A. p=x B. p=qC. p=&x D. p=&y8. 模板的主要用途是为了_。A. 提高代码的可重用性B. 提高代码的运行效率C. 实现多态性D. 加强类的封装性9. C+源文件的扩展名是_。A. .cB. .dswC. .dspD. .cpp10. 若已定义了A类的构造函数A(int a=0); 以下关于new运算符的用法错误的是_。A. A* p = new A;B. A* p = new A(1);C. A*
5、 p=new A1D. A* p = new A (1) 1;三、填空题:(20分)(共10个空格,每格2分)1. 已知以下程序的输出结果为:name: crqname: carter请将程序补充完整#include #include class Achar* name;public:void PrintName() (1) ;A(char* name) (2) ; (3) ;A() (4) ;class B: public Apublic:B( (5) ) :A(n);int main( )B b1(crq), b2(carter);b1.PrintName(); b2.PrintName(
6、);2. 定义一个函数模板,能够完成数组元素的求和,将以下程序补充完整:templateT sum( (7) , int n) (8) ;for (int i=0;in;i+)s += ai;return s;3. 请分别写出类A的一元运算符“+”的前缀方式和后缀方式的成员运算符函数形式的声明语句: (9) 、 (10) 。四、程序分析题:(25分)(共2小题,第1小题10分,第2小题15分)1. 分析程序,写出运行结果,并分析原因#include using namespace std;class Baseint y,m,d;public:Base(int _y=1, int _m=2, i
7、nt _d=3)y = _y; m = _m; d = _d;print(int y=1.5)couty m dy = y;class Derived: public Basedouble y,m,d;public:Derived(double y=1, double m=2, double d=3): Base(y,m,d),y(y),m(m),d(d) void print(double y=2.5)couty m dy = y; ;int main()Derived a(3.5, 4.5);Base& b = a, c=a;a.print();b.print();c.print(20.5
8、);return 0;2. 分析程序,完成:(1)写出程序的运行结果,并分析原因;(2)程序没有编译错误,但程序仍然存在内存管理方面的问题,请指出错误之处,分析错误的原因并进行改正。#include using namespace std;class Apublic:A(int a=5) coutcall A:A(a)endl; A() coutcall A:A()endl;class B: public A char *buf;public: B(int a)A:A(15);buf=(char*)malloc(a);coutcall B:B(a)endl;B()free(buf);coutc
9、all B:B()endl;int main() A* a=new B(10); delete a;return 0;五、程序设计题:(25分)1. 编写程序,要求:(1)定义抽象基类CShape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle(长方形)、Trapezoid(梯形)和Triangle(三角形),用虚函数分别计算各种图形的面积,并对它们按从大到小排序。(2)要求用基类指针数组。使它的每一个元素指向一个派生类的对象。注:主函数中定义如下对象:Circle circle(1.5); Square square(2.5); Rectangle r
10、ectangle(1.5, 2.5);Trapezoid trapezoid(1.5, 2.5, 1.0);Triangle triangle(3.0, 4.0);计算机科学与技术信息管理与信息系统台州学院2 0 11 学年第 1 学期 10 级 专业面向对象程序设计C+试卷A卷参考答案一、判断题:(10分)(共10小题,每小题1分)12345678910TFTFFTTFFT二、单选题:(20分)(共10小题,每小题2分)12345678910CDBABCCADD三、填空题:(20分)(共10个空格,每格2分)(1) coutname: namename = new charstrlen(na
11、me)+1_(3)_ strcpy(this-name,name)_ (4)_ delete name; _ _(5)_ char* n _ (6) typename T (7) T a (8)_ T s = 0; _(9)_ A& operator+() (10)_ A& operator+(int)_四、程序分析题:(25分)(共2小题,第1小题10分,第2小题15分)1、2.5 4.5 31 4 320 4 3对象a的初始值为3.5 4.5 3,其中第三个参数默认值,初始化列表里调用了基类的构造函数,因此通过b和c访问到的成员值是3 4 3a.print()调用派生类函数,并修改y值为2
12、.5b.print()调用基类函数,并修改基类的y值为1c.print(20.5);调用基类函数,并修改基类的y值为202、call A:A(5)call A:A(15)call A:A(15)call B:B(10)call A:A(5)(1)构造对象时先调用基类构造函数,再调用派生类构造函数;如果没有在初始化列表中显式调用,则调用默认的基类构造函数;析构函数的顺序与构造函数相反(2)基类里的析构函数不是虚函数,通过基类的指针指向派生类对象时,只会调用基类的析构函数,派生类的析构函数不会被调用,导致了派生类对象指针的内存泄露,基类的析构函数加上virtual变成虚函数后,由于C+的多态性,能
13、够解决问题。五、程序设计题:(25分)程序设计基本代码框架10分,程序细节处理15分。参考代码如下:专心-专注-专业#include #include using namespace std;class Shapepublic:virtual double area() const =0; ;class Circle:public Shapepublic:Circle(double r):radius(r)virtual double area() const return 3.14159*radius*radius; protected:double radius; ;class Squar
14、e:public Shapepublic:Square(double s):side(s) virtual double area() const return side*side; protected:double side;class Rectangle:public Shapepublic:Rectangle(double w,double h):width(w),height(h) virtual double area() const return width*height; protected:double width,height; ;class Trapezoid:public
15、 Shapepublic:Trapezoid(double t,double b,double h):top(t),bottom(t),height(h)virtual double area() const return 0.5*(top+bottom)*height; protected:double top,bottom,height; ;class Triangle:public Shapepublic:Triangle(double w,double h):width(w),height(h) virtual double area() const return 0.5*width*
16、height; protected:double width,height; ;bool cmp(Shape* a, Shape* b)return a-area()b-area();int main()Circle circle(1.5); Square square(2.5); Rectangle rectangle(1.5, 2.5);Trapezoid trapezoid(1.5, 2.5, 1.0);Triangle triangle(3.0, 4.0); Shape *pt5=&circle,&square,&rectangle,&trapezoid,▵ sort(pt,pt+5,cmp);for(int i=0;i5;i+)coutarea()endl;return 0;