《面向对象程序设计》C++期末试题及答案(A卷).docx
南开大学理科面向对象程序设计2-22007级期末考试试卷(A卷)2008年6月任课教师 学院 系别(班级)姓名 学号题号*四合计成绩B、单项选择(每空1分,共20分)(结果必须填写在题头相 应横线上)注意:请将选择题结果写在下面相应位置上:(1)(2)(3)(4)(5)(6)(7)(8)(9)(11)(13)(14)(16)(17)(18)1、下列关于构造函数说法不正确的是()。A)构造函数必须与类同名B)构造函数可以省略不写C)构造函数必须有返回值D)在构造函数中可以对类中的成员进行初始化2、任意一个类,析构函数的个数最多是( )oA)不限个数(B) 1(C) 2(D) 33、友元的作用是()。A)增减成员函数的种类B)加强类的封装性C)实现数据的隐藏D)提高程序的运行效率4、在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )oA)派生类的对象可以直接访问基类的所有成员B)派生类的对象可以初始化基类的引用C)派生类的对象不可以直接访问基类中的私有成员;(4)void Tennisclub:visit(Person &x)(cout<<"姓名:"<<x.name<vendl;cout<<"年龄:"<<x.agev<endl;coutv<"可以使用的俱乐部:n«club«endl;cout«n介绍人:" <<name«endl;)void main()(TennisClub a("明星俱乐部"J李晓明)Person b("张静28);a.visit(b);)2、文件filel.txt中有10个字符,下面的程序将文件filel. txt的内容复制到 文件file2.txt中。请将程序补充完整。(本题共12分,每空3分)#include<iostream.h>(5)using namespace std;#include<fstream.h>#include<stdlib.h>void main()(fstream infile, outfile;infile.open(nfilel .txtn,ios:in);if(! infile)(cout«"filel.txt can't open.nn;abort();)(6)outfile.openC6file2.txfiso:out)if(!outfile)cout«nfile2.txt can't open Ann;abort();char ch;for(int i=0;i<10;i+)infilech; 写入内存cout«ch;(7)return 0;Outfile«ch;写入文件)infile.close();outfile.close();)3、请将下面的程序补充完整,使得函数fun()具有多态性。(本题10分,、空每空3分,、(11)空每空2分)#include <iostream.h>#include <math.h>class Power(public:Power(int i)x=i;(9)virtual fun(power);Virtual void display();protected:int x;);class Square:public Powerpublic:(10)fun(Power);Square(int i):Power(i)void displayOcout«nx=H«x«endl;cout«nx square=1 *«x*x«endl;);(11)class Cube:public Power public:Cube(int i): Power(i)void displayO cout « Hx = * « x « endl; cout«Hx cube=n«x*x*x«endl;);Power &p)void fun(12) p.displayO;)void main() Square squ(2);Cube cub(3);fun(squ);fun(cub);2007级期末考试试卷(A卷)答案一、单项选择(每空1分,共20分)CBDAD CDDAA CCBDD DBBAD二、判断题(每空1分,共10分)FTFTT FFFTT三、读程序写结果(共36分)x=0,y=0x=2,y=3(3) x!=y(4) x=yn=10 (6) n=30s=5a=>-6(9) s=0c=>T (11) Hello50(13) OK!、程序填空(每空2至3分,共34分)(1) class TennisClubTennisClubfriend class TennisClub; 或 friend TennisClub; 分号可有可无(4) void TennisClub:visit(Person &x)(5) #include<fstream.h>(6) outfile.open(nfile2.txtH,ios:out);outfilevvch;infile.closeQ;(9) virtual void displayQ ;(10) Square(int i):Power(i) (11) class Cube:public Power(12) Power &pD)派生类的对象的地址可以赋给指向基类的指针5、下面对静态数据成员的描述中,正确的是()。A)静态数据成员可以在类体内进行初始化B)静态数据成员不可以被该类的对象调用C)静态数据成员不能受private控制符的作用D)静态数据成员可以直接用类名访问6、在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是( )oA)友元函数B)虚函数 C)构造函数D)析构函数7、下列对派生类的描述中错误的是()。A)派生类至少有一个基类B)派生类可作为另一个派生类的基类C)派生类除了包含它直接定义的成员外,还包含其基类的成员D)派生类对其继承的基类的成员访问权限保持不变8、下列关于this指针的说法,正确的是()。A) this指针一定指向常量型数据B) this指向的数据不可更改C)静态成员函数中也可以访问this指针D) this指针本身可直接作为成员函数的返回值9、下面关于类的成员函数描述不正确的是()。A)静态成员函数内可以直接访问类的非静态成员数据B)静态成员函数内可以直接访问类的静态成员数据C)非静态成员函数可以直接访问类的非静态成员数据D)非静态成员函数可以直接访问类的静态成员数据10、下列关于类和对象的叙述中,错误的是()。A) 一个类只能有一个对象B)对象是类的具体实例C)类是某一类对象的抽象D)类和对象的关系是一种数据类型与变量的关系11、有如下类声明:class Sample int x; ;则Sample类成员x是Sample类的()。A)公有数据成员B)保护数据成员C)私有数据成员D)以上选项都不正确12、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函 数重载的运算符。下列叙述中正确的是( )oA) operator+有两个参数,operator*有两个参数B) operator+有两个参数,operator*有一个参数C) operator+有一个参数,operator*有两个参数D) operator+有一个参数,operator*有一个参数 13、下列关于虚函数的说明中,正确的是( )oA)从虚基类继承的函数都是虚函数B)虚函数不得是静态成员函数C)只能通过指针或引用调用虚函数14、类模板的模板参数( )oA)只可作为数据成员的类型C)只可作为成员函数的参数类型 15、下列关于运算符重载的描述中,D)抽象类中的成员函数都是虚函数B)只可作为成员的返回类型D)以上3项均可以正确的是( )oA)运算符重载可以改变操作数的个数B)运算符重载可以改变运算符的优先级C)运算符重载可以改变运算符的结合性D)运算符重载可以使运算符实现特殊功能16、已知outfile是一个输出流对象,要想将outfile的文件指针定位到当前位 置之前321个字节处,正确的函数调用语句是()。A) outfile.seekp(321, ios:cur); B) outfile.seekp(321, ios:beg);C) outfile.seekp(-321, ios:beg); D) outfile.seekp(-321, ios:cur);17、下面描述中,错误的是(B )0A)公有继承时,基类中的public成员在派生类中仍是public的B)公有继承时,基类中的private成员在派生类中仍是private的C)公有继承时,基类中的protected成员在派生类中仍是protected的D)私有继承时,基类中的public成员在派生类中是private的18、派生类构造函数的调用顺序是先调用()。A)派生类的构造函数B)基类的构造函数C)派生类的析构函数D)基类的析构函数19、对于拷贝构造函数,正确的描述是()oA)在C+语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷 贝构造函数B)必须为每个类定义拷贝构造函数C)如果要使用拷贝构造函数,则必须在类中先定义D)当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构 造函数20、对于语句cout«endlx;中的各个组成部分,下列叙述中错误的是( )。A) “cout”是一个输出流对象B) “endl”的作用是输出回车换行C) “x”是一个变量D)”称作提取运算符二、判断题(每空1分,共10分)(注意把答案写在题头相应 堂3 横线上!答案T表示正确,F表示错误)1注意:请将判断题结果(正确为T,错误为F)写在下面 相应位置上:(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)1、在C+中,允许从一个类派生出任意多个类,但不允许某个类同时从多个 类派生。(F )2、抽象类虽然也是一种数据类型,但它不能建立对象,只能作为基类被其他 类继承。(T )3、一个类模板可以先建立对象,再实例化为相应的模板类,然后使用这个模 板类。(F )4、一个类的静态数据成员被该类的所有对象共享。(T )5、基类类型的指针可以指向其派生类对象。(T )6、任何类都要有不必提供参数的构造函数(默认缺省构造函数)。(T ) F 7、私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。(T ) F8、在C+中,可以声明虚构造函数和虚析构函数。(T )F9、类中所提供的成员函数可以直接访问该类的私有成员。(T )10、抽象类不能定义对象,但可以声明抽象类的指针或引用。(T )线上!)注意:请将程序运行的结果写在下面相应位置上:(1)(2)(5)(6)(7)(8)(11) (13)1、写出下面程序的运行结果。(本题12分,每空3分)#include<iostream.h>class Sample(int x,y;public:Sample() x=y=O;Sample(int a,int b) x=a;y=b;Sample。if(x-y) cout«Hx=yn«endl;else cout«nx!=yn«endl;void disp() cout«nx=H«x«n,y=n«y«endl; ;void main()(Sample si;Sample *ps2=new Sample(2,3);sl.dispO;ps2->disp();delete ps2;)(1)x=0,y=0(2)x=2,y=3(3)x!= y(4)x =y2、写出下面程序的运行结果。(本题6分,每空3分)#include<iostream.h>class Samplepublic:Sample()Sample(int i)n=i;friend Sample operator-(Sample &,Sample &);friend Sample operator+(Samp 1 e &,Sample &);void disp()cout«nn=n«n«endl;private:int n;);Sample operator-(Sample &sl,Sample &s2)(int m=sl.n-s2.n;Sample tmp(m);return tmp;Sample operator+(Sample &sl,Sample &s2)int m=sl.n+s2.n;Sample tmp(m);return tmp;)void main() Sample sl(10),s2(20),s3;s3=s2-sl;s3.disp();s3=s2+sl;s3.disp();)(5)n= 10(6)n=3 03、写出下面程序的运行结果。(本题12分,每空3分)#include <iostream.h>template <class Type> Type f(Type x, int n)(int i,s=0;Type tmp=x0J;for(i= 1; i<n; i+)if(xi<tmp) tmp=xi;if(xi>x0)s+;cout«ns="«s«endl; return tmp;)void main() int a=l, 3, -6,9, 2, 25, 44,-1, 51, 19;char c=b, T,'aAY;k;cout«na=>"«f(a,8)«endl; cout«nc=>n«f(c,3)<<endl;)(7)s=7 (8)a=>-6 (9)s=0 (10)b=>T4、写出下面程序的运行结果。(本题6分,每空2分) #include<iostream.h>const int N=100; class CStack public:CStack() top=0;cout«HHelloH«endl;CStack。 cout«HByen; void push(int i); int pop();private: int stackN; int top;);void CStack: :push(int i) if(top=N) cout«nOverflown;else top+; stacktop=i; int CStack:pop() int temp;if (top=0) cout«nUnderflown; return 0;) else temp=stacktopj; top-;return temp;)void main() CStack *ptr=new CStack;ptr->push (10);ptr->push(50);cout «ptr->pop()«" "«endl; cout« nOK!n«endl;)运行结果为:(11)HelloOK!50(13)BYE!OK!在题头相应的横线上!)四、程序填空(每空2至3分,共34分)(注意将结果写注意:请将填空结果写在下面相应位置上:(1)(2)(3)(4)(5)(6)(10)(11)1、下面的程序定义了两个类,一个是TennisClub,其成员数据有俱乐部和会 员名,另一个是Person,其成员数据有姓名和年龄,类TennisClub的成员函 数visit可以显示姓名、年龄、俱乐部名、会员名。其中TennisClub类是Person 类的友类。请将程序补充完整。(本题共12分,每空3分) #include<string.h>#include<iostream.h>class Person;(1)class Tennisclub ( public:(2)Tennnisclub(char *p,char *q) strcpy(club,p);strcpy(name,q);)void visit(Person&);private:char club24;char name24;);class Person (public:Person(char *p,int y) strcpy(name,p); age=y;(3)friend void Tennisclub:visit(Person);Friend class Tennisclub;private:char name241;int age;