C++期末复习试卷A

上传人:时间****91 文档编号:153328057 上传时间:2022-09-18 格式:DOC 页数:7 大小:40KB
返回 下载 相关 举报
C++期末复习试卷A_第1页
第1页 / 共7页
C++期末复习试卷A_第2页
第2页 / 共7页
C++期末复习试卷A_第3页
第3页 / 共7页
点击查看更多>>
资源描述
计算机科学与技术信息管理与信息系统 专业面向对象程序设计C+试卷(A卷)(闭卷)班级 姓名 学号 题号一二三四五总分分值1020202525100得分一、判断题:(10分)(共10小题,每小题1分)1. 重载函数必须有不同的参数列表。2. 私有继承中,基类中所有成员在派生类成员函数中都不可以访问。3. 动态绑定的多态性必须通过虚函数实现。4. 友元函数的声明在类体内,它是一种成员函数。5. 在类CDate中的析构函数可以声明为:void CDate();6. 在C+中,只能重载已有的运算符。7. 引用和指针都可作为函数参数。8. 可以在类的构造函数中对静态成员进行初始化。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. 要让一个类的所有对象具有共同的数据,要使用_。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 operator+ (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* 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();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, int _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);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);coutcall 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 rectangle(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(name)+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.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+的多态性,能够解决问题。五、程序设计题:(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 Square: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 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*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;
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!