面向对象程序设计复习资料_第1页
面向对象程序设计复习资料_第2页
面向对象程序设计复习资料_第3页
面向对象程序设计复习资料_第4页
面向对象程序设计复习资料_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面对对象程序设计期末总复习题一、单项选择题1.下面关于对象概念的描述中,_______是错误的。(B)A.对象代表着正在创建的系统中的一个实体 B.对象就是C语言中的结构体变量C.对象是一个状态和操作(或方法)的封装体 D.对象之间的信息传递是通过消息进行的2.继承机制的作用是:(C)A.信息隐藏 B.数据封装 C.定义新类 D.数据抽象3.有关析构函数的说法不正确的是_________(D)A.析构函数有且只有一个 B.析构函数无任何函数类型 C.析构函数没有形参D.析构函数不能是虚函数4.友元的作用之一是__________(A)A.提高程序的运行效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类5.通常拷贝构造函数的参数是__________。(C)A.某个对象名 B.某个对象的成员名 C.某个对象的引用名 D.某个对象的指针名6.假如在基类中将show声明为不带返回值的纯虚函数,正确的写法是________。(C)A.virtualshow()=0; B.virtualvoidshow();C.virtualvoidshow()=0; D.voidshow=0virtual;7.下面关于友元的描述中,错误的是_________。(D)A.友元函数可以访问该类的私有数据成员B.一个类的友元类中的成员函数都是这个类的友元函数C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承8.在C++中,_________运算符不能重载。(B)A.+ B.?: C.- D.<=9.下列关于运算符重载的描述中,________是正确的。(D)A.运算符重载可以变更操作数的个数 B.运算符重载可以变更优先级C.运算符重载可以变更结合性 D.运算符重载不行以变更语法结构10.在下列函数原型中,可以作为类AA构造函数的是_________(D)A.voidAA(int); B.intAA(); C.AA(int)const; D.AA(int);11.在声明类时,下面的说法正确的是_________。(C)A.可以在类的声明中给数据成员赋初值 B.数据成员的数据类型可以是registerC.private,public,protected可以按随意依次出现D.没有用private,public,protected定义的数据成员是公有成员12.继承具有________,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。(B)A.规律性 B.传递性 C.重复性 D.多样性13.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则___________。(A)A.完全相同 B.完全不同 C.部分相同,部分不同 D.以上都不对14.对虚函数的调用__________。(D)A.肯定运用动态联编 B.必需运用动态联编 C.肯定运用静态联编 D.不肯定运用动态联编15.关于成员函数特征的下述描述中,_______是错误的。(A)A.成员函数肯定是内置函数 B.成员函数可以重载C.成员函数可以设置参数的默认值 D.成员函数可以是静态的16.下面关于c++语言变量的叙述错误的是_______(B)A.在c++语言中变量分为auto,static,extern和register四种存储类型B.自动变量和外部变量的作用域为整个程序C.内部变量的作用域是定义它的函数D.外部静态变量的作用域是定义它的文件17.下列的各类函数中,_______不是类的成员函数。(C)A.构造函数 B.析构函数 C.友元函数 D.拷贝构造函数18.有如下类声明:classFoo{ingbar;};则Foo类的成员bar是_________(C)A.公有数据成员 B.公有成员函数 C.私有数据成员 D.私有成员函数19.下列表示引用的方法中,__________是正确的。已知:intm=10;(D)A.float&t=&m; B.int&y=10; C.int&z; D.int&x=m;20.设置虚基类的目的是________。(B)A.简化程序 B.消退二义性 C.提高运行效率 D.削减目标代码21.对于类中定义的成员,其隐含访问权限为________(B)A.public B.private C.static D.protected22.关于类和对象不正确的说法是________(B)A.类是一种类型,它封装了数据和操作 B.一个类的对象只有一个C.对象是类的实例 D.一个对象必属于某个类23.声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;该函数为___c___A.成员函数;构造函数 B.复制构造函数;析构函数C.构造函数;析构函数 D.析构函数;复制构造函数24.当一个派生类私有继承一个基类时,基类中的全部公有成员和爱护成员成为派生类的__A______A.private成员 B.protected成员C.public成员 D.友元25.在C++中,要实现动态联编,必需运用_____D___调用虚函数A.类名 B.派生类指针C.对象名 D.基类指针26.若一个类中含有纯虚函数,则该类称为____A____A. 抽象类 B. 纯基类C.派生类 D. 基类27.下列关于this指针的叙述中,正确的是___D_____A.任何与类相关的函数都有this指针B.类的成员函数都有this指针C.类的友元函数都有this指针D.类的非静态成员函数才有this指针28.有如下类声明:classBook{intnum();};则Book类的成员num是___D_____A.公有数据成员 B.公有成员函数 C.私有数据成员 D.私有成员函数29.下面有关重载函数的说法中正确的是___C_____A.重载函数必需具有不同的返回值类型;B.重载函数形参个数必需不同;

C)重载函数必需有不同的形参列表; D.重载函数名可以不同;30.设置虚基类的目的是___A_____A.消退二义性 B.简化代码 C.提高运行效率 D.削减目标代码31.在C++语言程序中,对象之间的相互通信通过___B_____ A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现32.下列运算符中,在C++语言中不能重载的是__C______

A.* B.>= C.:: D./33.下面对友元函数描述正确的是___C_____ A.友元函数的实现必需在类的内部定义 B.友元函数是类的成员函数 C.友元函数破坏了类的封装性和隐藏性 D.友元函数不能访问类的私有成员34.下面叙述不正确的是___A_____ A.基类的爱护成员在派生类中仍旧是爱护成员 B.基类的爱护成员在公有派生类中仍旧是爱护成员 C.基类的爱护成员在私有派生类中是私有成员 D.对基类成员的访问必需是无二义性35.下面对静态数据成员的描述中,正确的是___D_____ A.静态数据成员可以在类体内进行初始化 B.静态数据成员不行以被类的对象调用 C.静态数据成员不能受private限制符的作用 D.静态数据成员可以干脆用类名调用36.在C++类语言体系中,不能被派生类继承的有_______BA.转换函数 B.构造函数 C.虚函数 D.静态成员函数37.在类的定义中,用于为对象安排内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是____C____ A.友元函数 B.虚函数 C.构造函数 D.析构函数38.下列关于虚基类的描述中,错误的是_B_______ A.设置虚基类的目的是为了消退二义性; B.虚基类的构造函数在非虚基类之后调用; C.若同一层包含多个虚基类,这些基类的构造函数依据它们的次序调用; D.若虚基类由非基类派生而来,则仍旧先调用基类构造函数,再用派生类的构造函数;39.考虑函数原型void

test(int

a,intb=7,char="*"),下面的函数调用中,属于不合法调用的是___C_____

A.test(5)

B.test(5,8) C.test(6,"#")

D.test(0,0."*");

40.下列关于构造函数的描述中,错误的是___D_____A.构造函数可以设置默认参数; B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数; D.构造函数不行以重载

41.在重载一个运算符时,假如其参数表中有一个参数,则说明该运算符是()。DA.一元成员运算符B.二元成员运算符C.一元友元运算符D.选项B和选项C都可能42.在公有派生状况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()。CA.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以干脆访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针43.下面关于虚函数的描述,错误的是()。B

A.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B.基类中说明白虚函数后,派生类中对应的函数也必需说明为虚函数C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必需实现44.定义派生类时,若不运用关键字显示地规定采纳何种继承方式,则默认方式为()。AA.私有继承B.非私有继承C.爱护继承D.公有继承45.有如下程序:#includeusingnamespacestd;classONE{intc;public:ONE():c(0){cout<<1;}ONE(intn):c(n){cout<<2;}};classTWO{ONEonel;ONEone2;public:TWO(intm):one2(m){cout<<3;}};intmain(){TWOt4()return0}运行时的输出结果是()。CA.3B.23C.123D.21346.关于静态数据成员的描述中正确的是DA)类的静态数据成员不是类的全部对象共享的数据B)类的静态数据成员不能被类的成员函数调用C)类的静态数据成员不能被类的构造函数调用D)类的静态数据成员必需进行初始化47下面正确的是,在父类中的访问属性访问修饰符在子类中的访问属性()CA)public,private不能干脆访问B)protect,public,publicC)private,public不能干脆访问D)protect,private,protect48类A是类B的友元,类B是类C的友元,则下列说法正确的是DA)类B是类A的友元B)类C是类A的友元C)类A是类C的友元D)以上都不对49下列关于构造函数说法不正确的是CA)构造函数必需与类同名B)构造函数可以省略不写C)构造函数必需有返回值D)在构造函数中可以对类中的成员进行初始化50.类的析构函数的作用是DA)一般成员函数的初始化B)类的初始化C)对象的初始化D)删除类创建的对象51.下列说法正确的是BA)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C)类的内联函数必需在类体内定义D)类的内联函数必需在类体外通过加关键字inline定义52.下面对静态数据成员的描述中,正确的是DA)静态数据成员可以在类体内进行初始化B)静态数据成员不行以被类的对象调用C)静态数据成员不能受private限制符的作用D)静态数据成员可以干脆用类名调用二、学问点1.实现运行时的多态性要运用虚函数。2.假如一个类至少有一个纯虚函数,那么就称该类为抽象类。3.运算符重载不能变更操作符的个数、运算符的优先级、运算符的结合性和运算符的语法结构。4.构造函数是一种特别的成员函数,它主要用来为对象安排内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。5.静态成员函数不能干脆引用类中说明的非静态成员。6.引用是给对象取一个别名,它引入了对象的同义词。7.设置友元函数的目的是为能够访问该类的私有成员。8.运算符重载仍旧保持原来的优先级、结合性和语法结构。9.基类的私有成员不能被派生类的成员访问。10.静态联编支持的多态性称为编译时的多态性,也称静态多态性。11.任何类中允许有三种访问权限的数据,这三种访问权限分别是public、private、protected。12.为了满意运算符“+”的可交换性,必需将其重载为友元函数。13.对于含有对象成员的派生类,其构造函数的执行依次为:先执行基类的构造函数、再执行对象成员的构造函数,后执行派生类的构造函数。14.利用成员函数对双目运算符重载,其左操作数为this指针指出的对象,右操作数为成员函数参数。15.C++允许在相同的作用域内以相同的名字定义几个不同实现的函数,称这种同一个函数名多个含义的现象为函数重载。通过运用new和delete两个运算符进行的安排为动态存储安排。当类定义中有数据成员为指针时,解决浅拷贝出现的运行错误的方法是编写拷贝构造函数。假如运用protected继承基类,其公有成员就会变成派生类的爱护成员,其爱护成员就会变成派生类的爱护成员,其私有成员不能继承一个函数功能不太困难但要求被频繁调用,应定义为内联函数。抽象类只能作为基类运用,而不能声明它的对象。构造函数可以重载,析构函数不行以重载。静态成员函数没有this指针。类有两个特别的成员函数构造函数和析构函数。在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。其中operator+有一个参数,operator*有两个参数。一个派生类只有一个基类的状况称为单继承,而有多个干脆基类的状况称为多继承。调用析构函数的次序正好与调用构造函数的次序相反。27.非成员函数应说明为类的友元函数才能访问这个类的private成员。28.通过运用new和delete两个运算符进行的安排为

动态存储安排。29.假如类B继承了类A,则称类A为类B的基类,类B称为类A的派生类

30.表达式operator+(x,y)还可以表示为x+y。31C32将x+y*z中的"+"用成员函数重载,"*"用友元函数重载,应说明为x.operator+(operator*(y,z))33假如要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是friendvoidA();34派生类的成员一般分为两部分,一部分是从基类继承的成员,另一部分是自己定义的新成员。35继承的方式有公有继承、私有继承和爱护继承3种。三、读程序写结果1. 写出下列程序的运行结果 #include<iostream.h>classsample{public:sample(){cout<<”hello”<<endl;}};voidfn(inti){staticsamplec;cout<<”j=”<<i<<endl;}voidmain(){fn(20);fn(30);}helloj=20j=302.写出下列程序的运行结果() #include<iostream.h> intn=0;int&f(intm){n+=m;returnn;}voidmain(){f(22)+=20;cout<<”n=”<<n<<endl;}n=423. 写出下列程序的运行结果()#include<iostream.h>classA{public: intnum; A(inti){num=i;} A(A&a){num=a.num;num+=15;} voidprint(){cout<<num<<endl;}};voidmain(){ Aa(8);Ab(a); a.print(); b.print();}8234.写出下列程序的运行结果() #include<iostream.h>voidmain(){inta[10]={11,10,9,8,7,6,5,4,3},*p=a+5;cout<<*--p<<endl;*(p+3)+=5;cout<<p[3]<<endl;}795.写出下列程序的运行结果() #include<iostream.h>classA{inta;public: voidseta(intx){a=x;} voidshowa(){cout<<a<<endl;}};classB{intb;public: voidsetb(intx){b=x;} voidshowb(){cout<<b<<endl;}};classC:publicA,privateB{private: intc;public: voidsetc(intx,inty,intz) { c=z; seta(x); setb(y); } voidshowc(){cout<<c<<endl;}};voidmain(){Cc;c.seta(8);c.showa();c.setc(4,6,7);c.showc();}876.写出下列程序的运行结果() #include<iostream.h>classsample{intn;public: sample(){} sample(intm){n=m;} int&operator--(int) { n--; returnn; } voiddisp(){cout<<"n="<<n<<endl;}};voidmain(){samples(18);(s--)++;s.disp();}n=187. 写出下列程序的运行结果() #include<iostream.h>classsample{intx;public: sample(){} voidsetx(inti){x=i;} friendintfun(sampleb[],intn) { intm=0; for(inti=0;i<n;i++) if(b[i].x>m) m=b[i].x; returnm; }};voidmain(){samplea[10];intarr[]={9,8,4,7,55,32,20,15,68,65};for(inti=0;i<10;i++) a[i].setx(arr[i]);cout<<"theresultis"<<fun(a,10)<<endl;}theresultis688下列程序的输出结果为()#include<iostream.h>voidfun(intx=0,inty=0){ cout<<x<<y<<endl;}voidmain(){ fun(18);}1809.写出下列程序的运行结果()#include<iostream.h>classM{public: M(inta=0,intb=0){x=a;y=b;} intgetx(){returnx;} intgety(){returny;}private: intx,y; };voidmain(){ Mop1(22,18); inti,j; i=op1.getx();j=op1.gety(); cout<<"j="<<i<<"i="<<j<<endl; }j=22i=1810写出下列程序的运行结果()#include<iostream.h>classCat{ intnum,age;public: Cat(inti,intj){num=i;age=j;} Cat(Cat&c){num=c.num;age=c.age;num++;} voidprint(){cout<<num<<","<<age<<endl;}};voidmain(){ Catc1(33,12); Catc2(c1); c2.print();}34,1211.写出下列程序的运行结果()#include<iostream>usingnamespacestd;classTest{ staticintcount;public: Test(){ ++count; cout<<"对象数量="<<count<<endl; } ~Test(){ --count; cout<<"对象数量="<<count<<endl; }};intTest::count=0;voidmain(){ Testt[3];}对象数量=1对象数量=2对象数量=3对象数量=2对象数量=1对象数量=012.写出下列程序的运行结果()#include<iostream.h>#include<string.h>classgirl{public: girl(char*n,intd){ name=newchar[strlen(n)+1]; strcpy(name,n); age=d; } friendvoiddisp(girl&);~girl() {delete[]name;}private: char*name; intage; };voiddisp(girl&x){cout<<"Girl\'snameis"<<<<",age:"<<x.age<<endl;}voidmain(){girl e("李华",28);disp(e);}Girl'snameis李华,age:2813.写出下列程序的运行结果()#include<iostream>usingnamespacestd;classBook{ intnum,price;public: Book(inta=0,intb=0){num=a;price=b;} voidshowMoney(){cout<<num*price<<endl;}};voidmain(){ Bookb[]={Book(2,8),Book(5,10),Book(13,20)}; Book*p; inti; p=&b[2]; for(i=0;i<3;i++,p--) p->showMoney();}260501614.写出下列程序的运行结果()#include<iostream.h>intf(int);intmain(){ inti; for(i=0;i<5;i++) cout<<f(i)<<""; return0;}intf(inti){ staticintk=3; for(;i>0;i--) k+=i*2; returnk;}3511234315.有如下程序voidmain(){charch[2][5]={"6937","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]>′\0′;j+=2)s=10*s+p[i][j]-′0′;cout<<s;}该程序的输出结果是:638516.以下程序的输出结果是longfun(intn){longs;if(n==1||n==2)s=2;elses=n-fun(n-1);returns;}voidmain(){cout<<fun(3);}117以下程序的输出结果是。voidfun(){staticinta=0;a+=2;cout<<a<<"";}voidmain(){intcc;for(cc=1;cc<4;cc++)fun();cout<<endl;}246四、程序改错1.下面程序定义类point,并输出其数据成员的值。依据注释写出正确的语句。 #include<iostream.h>classpoint{public: //正确的为private: intx,y;private: //正确的为public:point(intxx,yy) //正确的为 point(intxx,intyy) { x=xx;y=yy; } voiddisp() {cout<<x<<""<<y<<endl;}};voidmain(){pointp1(3,4);cout<<x<<y<<endl; //正确的为p1.disp();}2.下列程序定义一个时钟类,并能设置和显示时间,要求ShowTime()函数为内联函数。 #include<iostream.h>classClock{public: voidSetTime(intNewH=0,intNewM=0,intNewS);//正确的为voidSetTime(intNewH=0,intNewM=0,intNewS=0) voidShowTime();private: intHour,Minute,Second;};voidClock::SetTime(intNewH,intNewM,intNewS){Hour=NewH;Minute=NewM;Second=NewS;}voidClock::ShowTime() //正确的为inlinevoidClock::ShowTime(){cout<<Hour<<":"<<Minute<<":"<<Second<<endl;}intmain(){ClockmyClock;cout<<"Firsttimesetandoutput:"<<endl;SetTime(); //正确的为myClock.SetTime();myClock.ShowTime();cout<<"Secondtimesetandoutput:"<<endl;SetTime(8,30,30); //正确的为myClock.SetTime(8;30;30);myClock.ShowTime();return0;3.下列程序定义了一个多继承的派生类,依据注释找出错误写出正确的语句。虚基类与最派生类#include<iostream.h>classVehicle{protected: intweight;public: Vehicle(intw){weight=w;} voidshow(){cout<<"classVehicle"<<endl;}};classBoat:publicVehicle //正确的为virtualpublicVehicle{public: Boat(intwb):Vehicle(wb){} voidshow(){cout<<"我能在水中游!"<<endl;}};classPlane:publicVehicle //正确的为virtualpublicVehicle{public: Plane(intwp):Vehicle(wp){} voidshow(){cout<<"我能在天上飞!"<<endl;}};classAmphibian:publicBoat,publicPlane{public: Amphibian(intwa):Boat(wa),Plane(wa){} //正确的为:Vehicle(wa),Boat(wa),Plane(wa){} voidshow(){cout<<"我能在水中游又能在天上飞!"<<endl;}};voidmain(){ Amphibiana; //正确的为Amphibiana(2380);实参随意正数 a.show();}4.下列程序定义了运算符重载,依据注释找出错误写出正确的语句。运算符重载#include<iostream.h>classM{ inta,b;public: M(){a=b=0;} M(intaa,intbb){a=aa,b=bb;} Moperator+(intx); //正确的为(M&x); Moperator-(Mx); //正确的为(M&x); voidOutB() { cout<<a<<''<<b<<endl;}};Moperator+(M&x) //正确的为MM::operator+(M&x){ Mr; r.a=a+x.a; r.b=b+x.b; returnr;}MM::operator-(M&x){ intr; //正确的为Mr r.a=a-x.a; r.b=b-x.b; returnr;}voidmain(){ Mx(3,5),y(8,4),z1,z2; z1=x+y;z2=x-y; z1.OutB();z2.OutB();}5依据注释找出错误写出正确的语句classCommonBase{public:intx;};classDeriveCommonA::publicCommonBase//正确的为classDeriveCommonA:publicCommonBase{public:inty;};classDeriveCommonB:publicCommonBase{public:intz;};classOverlapping:publicDeriveCommonA;publicDeriveCommonB//正确的为classOverlapping:publicDeriveCommonA,publicDeriveCommonB{public:voidDisplay(){cout<<"Valuesare:"<<endl;}intmain(){Overlappingov;ov.x=1;//正确的为ov.DeriveCommonA::x=1ov.y=2;ov.z=3;ov.Display();return0;}五、编程题1.编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论