面向对象程序设计
- 格式:doc
- 大小:61.00 KB
- 文档页数:10
《面向对象程序设计》期末考试试卷(A卷)(闭卷时间120分钟)院/系年级专业姓名学号一、选择题(本大题共10小题,每小题2分,共20分)1、下列选项中可以做C++标识符的是( a )A. _256B. fat/pigC. deleteD. 5char2、在一个C++程序中,main函数的位置( c )。
A.必须在程序的开头B.必须在程序的后面C.可以在程序的任何地方D.必须在其他函数中间3、在语句cout<<x;中,cout是( a )。
A.对象名B.类名C.函数名D.C++中的关键字4、下列选项中,与实现运行时多态性无关的是( b )。
A.虚函数B.重载函数 C.指针D.引用5、类的构造函数是在定义该类的一个( d )时被自动调用执行的。
A.成员函数B.数据成员C.友元函数D.对象6、下面关于抽象类的说法中错误的是( c )。
A.抽象类是包含有纯虚函数的类 B.抽象类是一种特殊的类C.抽象类可以定义自己的对象 D.抽象类可以派生新类7、下列关于虚基类的描述中,错误的是( d )。
A.使用虚基类可以消除由多继承产生的二义性B.构造派生类对象时,虚基类的构造函数只被调用一次C.建立派生类对象时,首先调用虚基类的构造函数D.声明“class B : virtual public A”说明类B为虚基类8、下列关于构造函数的描述中,错误的是( a )。
A.构造函数可以有返回值B.构造函数名与类名相同C.构造函数可以重载D.每个类都有构造函数9、关于异常处理,下列说法中错误的是( b )。
A.在C++程序中,由throw表达式抛出异常,throw抛出的可以是任何类型的数据B.在一个try-catch结构中,只能有一个try语句块和一个catch语句块C.当抛出异常后,系统会寻找匹配的catch语句,转到离出现异常最近的try-catch结构去处理D.当某条语句抛出异常时,跟在其后的语句将被跳过转到catch语句处,此时在try块中抛出异常前创建的对象将被自动释放10、若类X是类Y的友元类,则下列说法中正确的是( c )。
A.只有类Y的公有成员才能访问类X的私有成员B.只有类X的公有成员才能访问类Y的私有成员C.类X的所有成员都可以访问类Y的私有成员D.类Y的所有成员都可以访问类X的私有成员二、填空题(本大题共10小题,每小题2分,共20分)1、1、假定一条定义语句为“int arr[10], x, *pa=arr;”,若要用指针的方式将数组arr中下标为2的元素值赋给x,则语句为x=*(pa+2) 或者 x=pa[2]。
2、在一个类的定义中,包含有数据成员和的定义。
3、假定A为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为。
4、在C++中,用new函数动态申请存储单元,用函数来释放已申请的存储单元。
5、假定变量x定义为“int x=1;”,要将rx定义为x的引用(别名),应使用的语句为。
6、若Base是一个类,该类中具有一个函数体为空的不带参数的构造函数,此构造函数的类外定义语句为。
7、当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是。
8、有如下类定义:class Sample{public:Sample();~Sample();Static int data;};将静态数据成员data初始化为0的语句是。
9、形状类Shape中包含一个纯虚函数draw,它无形参和返回值,则draw函数在Shape类中的原型声明是。
10、如果一个派生类同时有多个直接基类,则该类的继承方式称为_ 继承。
三、简答题(本大题共2小题,第1题6分,第2题4分,共10分)1、简述面向对象程序设计的基本概念及主要特征。
2、简述析构函数的特点。
四、程序填空题(本大题共3小题,每空2分,共30分)1、设计一个复数类FS,重载“+”为FS类的友元函数,“—”为FS类的成员函数,来计算两个复数的和与差。
#include<iostream.h>#include<math.h>(1)//定义类FS{private:float sb, xb;public:(2)//定义构造函数{sb=s;xb=x;}(3)//重载“+”为FS类的友元函数{FS t;(4)t.xb=fs1.xb+fs2.xb;(5)}(6)//重载“—”为FS类的成员函数{ FS t;t.sb=sb-fs1.sb ;t.xb=xb-fs1.xb;return t;}};2、设计一个程序,将D盘中data文件中的英文文本文件datain.txt中的大写字母转换成小写字符,并输出到该文件夹下dataout.txt文件中,然后显示dataout.txt文件中的内容并且统计字符的个数。
#include<iostream.h>#include<fstream.h>#include<string.h>void main(){char ch[30];int i;(7)//定义输入流对象,并打开datain.txt文件;if(!ifile){cerr<<"open file fail"<<endl;return;}for(i = 0;i<30 ; i++) //将大写字母转换成小写{if(ifile.get(ch[i]) && ch[i] !='\0'){if(ch[i]>='A'&&ch[i]<='Z')ch[i]+=32;}else{break;}}ch[i] = '\0';(8)//定义输出流对象,并打开dataout.txt文件if(!ofile){cerr<<"open file fail"<<endl;return;}(9)cout << "dataout.txt "<<strlen(ch)<<endl; //显示统计的字符个数cout << "dataout.txt"<<ch<<endl; //显示字符ifile.close ();(10)}3、用模板定义一个类,该类是对包含10个元素的数组求和、求最大值、求最小值。
#include<iostream.h>const int MAX_SIZE = 10;(11)//定义模板class array{private:(12)public:array(){cout<<"please input 10 elements:"<<endl;for(int i=0;i<10;i++)cin>>arr[i];}T sum(){(13)for(int i=0;i<10;i++){s=s+arr[i];}return s;}T max(){T m=arr[0];for(int i=1;i<10;i++){(14)m=arr[i];}return m;}T min(){T m=arr[0];for(int i=1;i<10;i++){if(m>arr[i])m=arr[i];}return m;}};void main(){(15)//实例化浮点型数组类cout<<"the sum of array is"<<a.sum()<<end;cout<<"the max element of array is"<<a.max()<<endl;cout<<"the min element of array is"<<a.min()<<endl;}五、编程题(本大题共2小题,每小题10分,共20分)1、设计一个长方形类Rectangle,计算并输出长宽为4.5cm和3.5cm长方形的面积和周长。
2、设计抽象图形类Figure,提供成员函数getArea()求面积和getPerim()求周长,并将它们定义为虚函数;由此派生矩形Rectangle类和圆Circle类,矩形类和圆类均有对getArea()和getPerim()的重定义,在main()函数通过Figure类指针访问Circle类和Rectangle类的求面积和求周长的成员函数。
《面向对象程序设计》(A卷)参考答案一、选择题1-5 ACABD 6-10 CDABC二、填充题2、x=*(pa+2) 或者 x=pa[2]3、成员函数4、x.a()5、delete6、int &rx=x;7、Base::Base(){ }8、公有或保护9、int Sample::data=0;10、virtual void draw()=0;11、多三、简答题1、对象:是系统中用来描述客观事物的一个实体,它是用来构成系统的基本单位,由一组属性和一组行为构成;类:是具有相同属性和服务的一组对象的集合,为属于该类的全部对象提供了抽象的描述,其内部包括属性和行为两个主要部分。
抽象:是指对每一类对象进行概括,抽出这类对象的公共性质并用计算机语言加以描述的过程。
封装:可以将对象的属性和操作结合成一个独立的系统单位,并尽可能的屏蔽对象的内部细节,只保留有限的对外接口使之与外部发生联系。
继承:是新建的类从已有的类那里得到已有的特征,实现了软件的重用,增强了系统的可扩充性。
多态:是指一般类中定义的属性或行为,被特殊类继承后,可以有不同的数据类型或表现出不同的行为。
2、1)析构函数和类名称完全相同,只是在前面加一个“~”2)析构函数是为了完成对象被释放前的一些清理工作3)当没有定义析构函数时,系统会自动的生成一个默认的析构函数4)析构函数不带任何的参数5)系统自动调用四、程序填空题1、class FS2、FS(float s=0,float x=0)3、friend FS operator +(FS &fs1,FS &fs2)4、t.sb=fs1.sb+fs2.sb5、return t6、FS operator-(FS &fs1)7、ifstream ifile("d:\\data\\datain.txt")8、ofstream ofile("d:\\data\\dataout.txt")9、ofile<<ch10、ofile.close()11、template<class T>12、T arr[MAX_SIZE]13、T s=014、if(m<arr[i])15、array<float> a五、编程题1、#include<iostream.h> //1分class Rectangle{ //2分float length,width;public:Rectangle(float len, float wid){ //1分length=len;width=wid;}float Area(){ //1分float A;A=length*width;return A;}float Peri(){ //1分float P;P=2*(length+width);return P;}void Display(){cout<<"面积为"<<Area()<<endl;cout<<"周长为"<<Peri()<<endl;}}; //1分int main(){Rectangle r(4.5,3.5); //2分r.Display(); //2分return 1;}2、#include<iostream.h> //1分class figure{public:virtual double getperim()=0; //2分virtual double getarea()=0;};class rectangle:public figure{ //2分double a,b;public:double getperim();double getarea();rectangle(double x=0,double y=0);};class cricle:public figure{ //2分double r;public:double getperim();double getarea();cricle(double x=0);};rectangle::rectangle(double x,double y) {a=x;b=y;}double rectangle::getarea(){return a*b;}double rectangle::getperim(){return 2*(a+b);}cricle::cricle(double x){r=x;}double cricle::getarea(){return 3.1415*r*r;}double cricle::getperim(){return 3.1415*2*r;}int main(){rectangle r(3,4);cricle c(5);figure *f; //1分f=&r; //1 分cout<<"长方形的面积为:"<<f->getarea()<<"长方形的周长为:"<<f->getperim()<<endl; //1分f=&c; 、cout<<"圆的面积为:"<<f->getarea()<<"圆的周长为:"<<f->getperim()<<endl;return 1;}。