2023年面向对象程序设计考前复习题及答案.docx
简答题1、传统的结构化程序设计的优点和缺陷是什么?优点:(1)这种程序设计方法力求算法描述准确。(2)对每一子过程模块容易进行程序对的性证明。缺陷:(1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稔定和多变的,因 此不能直接反映人类求解问题的思绪。(2)程序代码可重用性差。程序中除少数标准库函数外,每设计个程序时,程序员几乎从 零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。(3)维护程序的一致性困难。该种方法将数据与对数据进行解决的程序代码分离。2、什么是对象?每个对象都具有属性(At t r i b ute)和方法(Me t h。d)这两方面的特性。对象的属性描 述了对象的状态和特性,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个 对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。3、什么是消息?在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联 系来反映。当个对象需要此外一个对象提供服务时,它向对方发出个服务请求,而收到 请求的对象会响应这个请求并完毕指定的服务。这种向对象发出的服务请求就称为消息。 4、什么是多态性?所谓多态性是指当程序中的其他部分发出同样的消息时,按照接受消息对象的不同可以 自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为, 从而为程序设计带来更大方便。5、什么是面向对象的程序设计方法?这种方法将设计目的从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各 自的行为。ca 1 lcd"<<e n dl; b 2 =v a 12;cout«" b a se2 is);class D: pu b lie Bl,public B2 p r o te c ted:i n t d ;pu b lie:D( i nt val 1 , i n t v a 1 2 , i n t val 3 );D: :D(in t vail, in t va12» int v a 13) : B 1 (v a 11), B2(val 2 ) d =val3;c o u t«"deri v ed class i s c a lied ” ;voi d main() D do bj(l, 2,3) ; 3 . # include < w indo w s.h># in c 1 u d e <iost r e am. h >cla s s marriedprivat e :int numbe r;c h ar * n ame?p u b 1 ic:static int glob?void set _mes( c h ar *a);voi d married : set _mes ( c har * a)name = newc h arfst r len( a )+ 1 ;st r c p y (n a me, a);。number= + 4-glob?co u t « "编号:"vVn u mber«e n dl;)i n t m a rri e d : g I o b= 0 ;void m a i n () marr i ed per son” 00;int i : gchar s t r 8 cout<<end 1 ;for ( i= 0 ; i<3; i +)g c ou t « "输入姓名:":cin» spersoni. s e t_me s (str);c o ut«end 1 ;)假定输入zha ng/w a ngZ1 i /请写出程序的结果。4.# include <i o stream, h >tempi a tc < c 1 a s s T, int I> c lass A BCprivate:T array I;。p u blic:void set (in t x> in t i ;for (i=0; i< I ; i+) ar r ay i=x+i;)v o id ge t ()。 cout << " n 数组元素总数为:"Vv I «end 1 ;c oul «" ar r ay " «I-1« " ="<< a r r a yI- 1 «endl; 1;void ma i n() ABC <int, 5 0> abcl ;ab c 1 .s e t( 0 );abcl. get();ABC <in t ,1(K)> abc2;abc2.s e t(10);a b c 2. g et ();程序运营结果:5 . #in c lu d e <i o stream. h>class Stude n t public:S t u d en t () cou t «*,c o n s t ruct st u dent. n";s e mes h ours=l()();gpa= 3 .5;p ro t e c te d :int semeshour s ;f 1 oat g P a;);c la s s Tea c h e r pu b 1 ic:T e a c h er() cout<<,co n s t rue tTeacher.Vn',;);cla s s To u r p ai rpu b li c :Tour p a i r ()coutvv“cons t ruct t ourpair.n";n ome e t i n g=();pro tecte d :S tude n t st u dent;T eacher t e a c her;i n t n o me e t i ng;);void ma i n() T ourpa i r t p ;cou t <V"back in mai n .n”;cl a s s Mycla s s priv a te:i nt x;ini y;pu b lie:Myc 1 ass(int a, i n t b) x =a;y=b;)v oid pr i nt();void myfunc();;voi d Myc 1 a s s:pr i nt() cou t << " x= *' << x <<","«',y=',« y «en d I; v o id Mycla s s:myfun c () i n t x=9,y= 1 0;c o u t «nIn myfu n c: x=n«x<< '* ,"<< " y =,<<y«en d 1: cout < <"My c 1 ass : : x = "< V My c lass:x <«Mycla s s: : y =u<<My c 1 ass: y «end 1 ;)v oid main() M y cl a ss t e st( 10 0,2 00);test.print () ;/通过对象名访问公有成员t e st. myfunc ();# i nclude <ios t ream, h >c lass A p r iv a t e:in t a;pub 1 ic:A(i n t i=0) a = i ; void print(););vo i d A : :p r i n t () c o ut« ”In c 1 a ss A, p r i n t() is c all e d. M <<endl;) class B :pub 1 ic A(priv ate:int b;public:B( i nt j =-l) b=j;);v o id comm f u n (A &ar e f) a r e f .pr i n t (); void mai n ()(Aa;c ommfu n (a);Bb;c om m fu n ( b );7. #incl u de " ios t ream.h"class Xl() priv a te:int x;publ i c:Xl( inti) x= i ; int g e t x ();friend voidsum(X 1 &a, X 1 &b);int X 1: g ct x () r eturn x ;void sum (XI &a,X1 &b>cout<V"用友元函数求各和:"<<a. x + b .x«endl;)void sum 1(X 1 &a,X 1 & b)cout<<”用普通函数调用类公共接口函数求和:”« a . ge t x() +b.ge t x()«en d 1;)void m a in ()XI m(l);XI n(2 );s u m(m,n);s u m 1 (m, n);)答案:1 .执行结果如下:构造新同学:No name构造新同学:z hang构造 c o p y of zhang构造指导教师析构 cop y o f zhan g析购zha n g析构N o name2 .该程序的执行结果是:bascl i s c a 11c dbase2 i s c ailedder i ved c las s i s c a lied3 .程序的结果:Z h ang编号1Wa n g编号2L i编号34 .程序的结果:数组元素总数为:50a r ray 49 =49数组元素总数为:1 0 0arr a y 9 9 = 109.其执行结果是:c o nslru c t student.cons truct t e ache r .const r uct t o u r pa i r.back i n in a in.5 .程序的运营结果为:x = 1 00, y = 2 00I n m y f unc: x=9, y =10Myclass:x=10 0 ,Myclass: y =200.程序的运营结果为:I n c 1 a ss A, p ri n t() is c a lied.In c la s s A, print() i s called.6 .程序的运营结果为:用友元函数求各和:3用普通函数调用类公共接口函数求和:3六、编程题1 .定义类模板ABC,内含成员函数s et fl g e to用ABC生成对象abcl和a bc2o它们的数组元素数不同,显示的结果也不同。# i n c lude < i ostream. h >/定义类模板ABCtempla t e <cl a ss T, i n 11> c la s s ABC priva t e :T a rray f I 1产定义数组arraypub 1 ic:v o id set (i n t x )。/ / 定义成员函数 set i nt i;for (i=0; i< I ; i + + )。循环 I 次ar r ayf i =x+i;/数组元素赋值V oi d get ()。定义成员函数get cou t << n n数组元素总数为:"VvI «endl;c out «u ar r a y"<<I 1<<" = "«ar r ay l 1 1< <e n dl; ;vo i d ma i n() / /由模板ABC生成对象abclAB C <int,5O> abcl;abc 1 .set(O);调用对象 ab c l.setabc 1 . ge t ();调用对象 abc 1 . g et/由模板ABC生成对象a bc2ABC <int, 10 0 > abc2;a b c2. s et(10);/调用对象 abc 2. setabc2. g e t ();/ /调用对象 a b c 2 .ge t)2. Buid_l是一个关于楼房数据的类。它的数据成员有p osi_x. posi_y 和are a,分别是楼房位置的经、纬度和建筑面积。它的函数成员只有set 1 ,用 于设立数据成员posi.x. posL y和a rea的值。让B u ild_ 1作为基类,再增长数 据成员high、函数成员set2和d i sp来定义派生类Build_2。# i nclude <ios t r e a m.h>c 1 a ss Build_l定义基类pro tect e d:int pos i _x;/有三个保护型的数据成员int posi_y;int area;在OO P中,将“对象”作为系统中最基本的运营实体,整个程序即由各种不同类型的 对象组成,各对象既是一个独立的实体,又可通过消息互相作用,对象中的方法决定要向哪 个对象发消息、发什么消息以及收到消息时如何进行解决等。6、面向对象方法的特点是什么?(1) OOP以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具 有相对稳定性,可以被用作一个组件去构成更复杂的应用,乂由于对象一般封装的是某一实际 需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。(2)引入了“类”(class )的概念。类与类以层次结构组织,属于某个类的对象除具有该类 所描述的特性外,还具有层次结构中该类上层所有类描述的所有性质,OOP中称这种机制为 继承。(3)00P方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和 功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大 减少了重新编写新代码的工作量,同时减少了程序设计过程中犯错的也许性,达成了事半功 倍的效果。7、面向对象的程序设计方法与结构化程序设计方法的比较(1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和解决数据的过程代码是 分离的、互相独立的实体,设计出的程序可重用代码少,且当代码量增长时维护数据和代码的 一致性困难。(2)面向对象程序设计方法中,对象所具有的封装性和继承性使得代码重用成为也许,并大 大减少了程序犯错的也许性。(3)面向对象方法吸取了结构化程序设计方法的优点,同时引入了新概念、新机制并建立了 比传统方法更高层次的抽象。二、选择题略三、填空题pu b lie:void set 1 ( i n t x, int y , i nt a) posi_x= x ; p o s i _y=y; area=a; );/定义派生类Bui 1 d_2c 1 a ss Bu i ld_2 : p u b lie B uild_1 int heig h t;p ublic:voi d s e t 2 (int h )heigh t =h;void d is p () cou t « " n 经度:n«posix« e ndl;c out«M纬度:"vp o si_ y «en d I;cout« "高度:"v Vhei g ht<<en d I;c o ut<<MffiR:"<<area<<endl«endl; ;vo i d mai n ()/用B u i ld_2生成对象。bjBui 1 d_2o b j;o bj.setl(100, 200,300);obj.set2 (400);ob j .d i sp();(1)类是一个支持集成的抽象数据类型,而对象是类的【1】O【参考答案】1 实例(2)在C+语言的面向对象程序设计框架中,【2】是程序的基本组成单元。【参考答案】2类(3) C+语言程序的注释可以出现在程序中的任何地方,一个注释以【3】作为开 始和结束的标记。【参考答案】3 /* */(4)以下程序的输出结果是【4】.#include "iostream, h"void fun() st a tic int a;a+=2;c out« a « "voi d m a in()int cc;for (cc=l;cc<4;cc+)fun ();cout << e n d 1;)【参考答案】4 24 6(5)下列程序在构造函数和析构函数中申请和释放类的数据成员ini *a,申请时使用 形参b初始化a,请填空。cl a s s A public:A(int b);A ();private:i n t *a; ;A:: A (i n t b)(【5】;A:A ()【6】;【参考答案】5 a = new i n t (b);6 delet e a6 多态性与【7】和【8】共同构成面向对象程序设计的三大机制。【参考答案】7数据封装【8】继承(7)将x+y*z中的“"用成员函数重载,”用友元函数重载应写为 【9】o 【参考答案】9 x. opcrat o r+(op e rat o r *( y ,z)(8)派生类的成员一般分为两部分,一部分是10,另一部分是自己定义的新成 员。【参考答案】10从基类继承的成员(9 )以下程序输出的结果是【11】o#i n elude " i o s t r eam.h"void main ()i n t a=5> b=4,c=3, d ;d=(a>b> c );c o ut« d ; 【参考答案】11 0(1 0 )假如要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义 中加入的语句是【12】。【参考答案】12 friend v o i dA ();(1 1)假如类B继承了类A.则称类A为类B的基类,类B称为类A的13。【参考答案】13 派生类(12)将x+y中的+运算符用友元函数重载应写为【14】。【参考答案】1 4 operator+ (x, y )(I 3)已知程序的结果为12 3,请填空。#inc 1 ud e temp 1 at e cla s s A pu b 1 i c :T x , y ,z;void d i s p la y ()cout« x « " " « y << " " « z;voi d main () Aa 1;1517a 1 . d i s p lay(); 【参考答案】15 al.x= 1 16 al. y =2 17 al.z=3(14)下列程序段的输出结果是 18 oco u t « fixe d << 5 0 9. << e ndl:【参考答案】50 9.123457四、综合应用题1 .使用VC6打开考生文献夹下的工程ktl 5_3o此工程包含一个ktl5_3.cpp,其中 定义了类A、A 1和A 2,其中Al类由A类公有派生,A 2类由Al类公有派生。上述三个类 的定义并不完整,请按规定完毕下列操作,将程序补充完整。(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x 赋值给数据成员a。请在注释“* 1 * * ”之后添加适当的语句。(2 )定义类A 1的构造函数,该构造函数有两个整型参数x和y,在构造函数中请将x 赋值给数据成员b,将y作为基类A构造函数的参数值传入。请在注释“ /后添加适当的语句。(3)定义类A2的构造函数,该构造函数有三个整型的参数x,y和z,在构造函数中请 将x赋值给数据成员c,将y和z分别赋值给基类A 1构造函数的参数x和y。请在注释“/ /*3*”之后添加适当的语句。(4 )完毕类A 2的成员函数show的定义,该函数调用基类成员函数,输出基类数据 成员a和b及类A2自身的数据成员c的值,上述三个值在输出时以空格隔开。请在注释“/ /* 4*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。程序输出结果如卜.:962源程序文献kt 15_3. cpp清单如下:# i nci u d e<iostream. h>cl a s s A inta;pub lie:/ *i*i n t gcta() r eturna: ;cl a s sA 1 :p u bli c A intb;p u b li c :/ / *2木*i n t g e tb()r e t u r n b;) ;c IassA2: p ubl i c Al i ntc;p u bl i c:/* * 3 * *v o i ds h ow() * 4 * ;voidina i n() A 2a( 2 , 6 , 9);c out«a. ge t a()< <en d 1;cout«a.ge t b() «endl:;a.s h o w(); 【参考答案】(l)A(int x) a=x; (2) A 1 ( i nt x ,int y ) : A( y ) b=x; (3) A2( i nt x , in t y, int z):A 1 (y,z) c =x;)(4) c out«geta ()«" M«getb()« ""cou t <<c<<"n "五、阅读程序题(写出程序运营结果)I .# i nclu d e <iosl r eam.h># incl u d e <strin g .h>c 1 a s s St u dent p u blic:Stu d en t (char * p Name= " No name") cou t 构造新同学:H «pName«endl;s t r n c p y(name, pN a me, s izeof(name);name s i zeo f ( n a m e;)Stu d ent (S t u dent &s) co u tv V”构造 c o p y of "«s. n ame«end I ;str c py(n a me," copy o f");strc a t(n a me,s. n ame);IS t udent() c 析构"<< n ame« e nd 1 ; p rot e c ted :c h ar name 4 0; ;class Tutor pub lie:Tutor( S t ud e nt &s):stud e n t(s) cout<<"构造指导教师n"p r otected:S t ud e nt st u den t ;);vo i d mai n () Student stl;Stu d e nt st2 (" z hang"):Tut o r lu( o r( s t 2);)2. #inclu d e " ios t r e a m. h "cl a ss B 1protected:in t bl;p u b 1 i c :Bl(int va 1 1) b 1 =val I ?cout<<"basel is c a lled"<<endl;;c 1 a ss B2 pro t ected:i n t b2;p u blic:B2(in t va 1 2)