资源描述
上海应用技术学院20112012学年第一学期 面向对象程序设计 期(终)(B)试卷课程代码: B2042211 学分: 3 考试时间: 100 分钟课程序号: 1126045 1126046 1126047 1126048 班级: 学号: 姓名: 我已阅读了有关的考试规定和纪律要求,愿意在考试中遵守考场规则,如有违反将愿接受相应的处理。题 号一二三四五六七八九十总 分应得分303040100实得分 试卷共 页,请先查看试卷有无缺页,然后答题。一、选择题(每题2分,共30分)1. 关于类和对象不正确的说法是(C )A)类是一种类型,它封装了数据和操作B)对象是类的实例C)一个类的对象只有一个D)一个对象必属于某个类2.在类定义的外部,可以被访问的成员有( C )A) 所有类成员 B) private或protected的类成员C) public的类成员 D) public或private的类成员3.关于this指针的说法错误的是( A )A) this指针必须显示说明 B) 当创建一个对象后,this指针就指向该对象C) 成员函数拥有this指针 D) 静态成员函数不拥有this指针4.下面对构造函数的不正确描述是(B )A) 系统可以提供默认的构造函数 B) 构造函数可以有参数,所以可以有返回值C) 构造函数可以重载 D) 构造函数可以设置默认参数5.下面对析构函数的正确描述是(C )A) 系统不能提供默认的析构函数 B) 析构函数必须由用户定义C) 析构函数没有参数 D) 析构函数可以设置默认参数6.对静态成员的不正确描述是(C )A) 静态成员不属于对象,是类的共享成员B) 静态数据成员要在类外定义和初始化C) 调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针D) 非静态成员函数也可以操作静态数据成员7.下面选项中,不是类的成员函数为( C )A) 构造函数B) 析构函数C)友元函数 D) 缺省参数的构造函数方言8.下面对友元的错误描述是( D )A) 关键字friend用于声明友元B) 一个类的成员函数可以是另一个类的友元C) 友元函数访问对象的成员不受访问特性影响 D) 友元函数通过this指针访问对象成员9.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( A )A) public成员B) private成员C) protected成员D) 友元10.不论派生类以何种方法继承基类,都不能使用基类的(B )A) public成员B) private成员C) protected成员D) public成员和protected成员11.在创建派生类对象时,构造函数的执行顺序是( D )A)对象成员构造函数、基类构造函数、派生类本身的构造函数B)派生类本身的构造函数、基类构造函数、对象成员构造函数C)基类构造函数、派生类本身的构造函数、对象成员构造函数D)基类构造函数、对象成员构造函数、派生类本身的构造函数12.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B )A) 不同 B) 相同C) 相容D) 部分相同13. 下面函数原型声明中,( B )声明了fun为纯虚函数A) void fun()=0; B) virtual void fun()=0; C) virtual void fun(); D) virtual void fun();14.假设A为抽象类,下列声明( B )是正确的A) A fun(int); B) A *p; C) int fun(A); D) A Obj;15.已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,( C )是正确的。A. A1.p=5; B. A1-p=5;C. A1.*p=5; D. *A1.p=5;二、写出程序运行结果(每题 6分,共 30 分)1、写出下列程序的运行结果。#include using namespace std;class MyPoint public: MyPoint(int xx=5, int yy=5) X = xx; Y = yy; cout(X,Y); private: int X, Y; ;void main() MyPoint a(10,10),b;(10,10) (5,5)2、写出下列程序的运行结果。#includeusing namespace std;int i=0;void fun() static int i=1; couti+,;couti,;int main()fun();fun();return 0;1,0,2,03、写出下列程序的运行结果。#includeusing namespace std;class testprivate: int a;public: test()coutconstructorendl; test(int a)coutaendl; test()coutdestructorendl;int main() test A(3); return 0;3Destructor4写出下列程序的运行结果。#includeusing namespace std;class Sampleint n;public:Sample()Sample(int i)n=i;friend Sample operator-(Sample &,Sample &); friend Sample operator+(Sample &,Sample &);void disp()coutn=nendl;Sample operator -(Sample &s1,Sample &s2)int m=s1.n-s2.n;return Sample(m);Sample operator + (Sample &s1,Sample &s2)int m=s1.n+s2.n;return Sample(m);void main()Sample s1(10),s2(20),s3;s3=s2-s1;s3.disp();s3=s1+s2;s3.disp();n=10n=305、写出下列程序的运行结果。#includeusing namespace std;class Apublic:A(char *s)coutsendl;A();class B:public Apublic:B(char *s1,char *s2):A(s1)couts2endl;class C:public Apublic:C(char *s1,char *s2):A(s1)couts2endl;class D:public B,public Cpublic:D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s1,s3)couts4endl;void main()D d(class A,class B,class C,class D);四、编程题(共40分,每小题10分)1. 将字符串“ABCD1234efgh”前后对调显示。#include #include void main()char a = ABCD1234efgh;char * p;char * q;char * t;int i;for (i = 0; i strlen(a) / 2; i+)p = &ai;q = &a11 - i;*t = *p;*p = *q;*q = *t;printf (调换后的字符串为:%sn, a);getch();2. 编写三个重载函数,返回一个整数、实数和双精度数的三倍。3. 声明一个基类Base,有两个公有成员函数fn1( ),fn2( ),私有派生出Derived类,要求main函数通过Derived类的对象调用基类的函数fn1( ),fn2()#includeclassBaseClasspublic:voidfn1();voidfn2();voidBaseClass:fn1()cout调用基类的函数fn1()endl;voidBaseClass:fn2()cout调用基类的函数fn2()endl;classDerivedClass:publicBaseClasspublic:voidfn1();voidfn2();voidDerivedClass:fn1()cout调用派生类的函数fn1()endl;voidDerivedClass:fn2()cout调用派生类的函数fn2()fn1();pBaseClass-fn2();pDerivedClass-fn1();pDerivedClass-fn2();4. 下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数#include#includeusing namespace std;class Rectangle:public Shape float x1,x2,y1,y2;public: Rectangle(float argx1=0,float argy1=0,float argx2=0,float argy2=0); float getArea();Rectangle:Rectangle(float argx1,float argy1,float argx2,float argy2) x1=argx1;y1=argy1;x2=argx2;y2=argy2;float Rectangle:getArea() float length,width; length=x1x2 ? x1-x2 : x2-x1; width=y1y2 ? y1-y2 : y2-y1; return length*width;class Triangle:public Shape float x1,x2,y1,y2,x3,y3;public: Triangle(float argx1=0,float argy1=0,float argx2=0,float argy2=0,float argx3=0,float argy3=0); float getArea();Triangle:Triangle(float argx1,float argy1,float argx2,float argy2,float argx3,float argy3) x1=argx1;y1=argy1;x2=argx2;y2=argy2;x3=argx3;y3=argy3; float Triangle:getArea() float a,b,c,s; /分别求三边 a=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); b=sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3); c=sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3); s=(a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c); /海伦公式求三角形面积
展开阅读全文