《2023年面向对象程序设计总复习资料.docx》由会员分享,可在线阅读,更多相关《2023年面向对象程序设计总复习资料.docx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计总复习(2023夏)女习之一、对照书本(或上课课件)上,搞懂有关概念【第0工章】1 .面向对象程序设计是不同于传统程序设计的一种新的程序设计范型。它对减少软件的复杂性,改 善其重用性和维护性,提高软件的生产效率,有着十分重要的意义。因此面向对象的程序设计被认 为是程序设计方法学的一场实质性的革命(在导学中)。2 .面向对象(0。)程序设计是一种新的程序设计范型。这种范型的重要特性是:程序=对象+消息面向对象程序的重要结构特点是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接受到后,启动有关方法完毕相应 操作。3,现实世
2、界中,对象一般可以表达为:属性+行为现实世界中的对象,具有以下特性:(1)每一个必须有一个名字以区别于其他对象;(2)用属性来描述对象的某些特性;(3 )有一组操作,每组操作决定对象的一种行为;(4)对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行 为。4.在现实世界中,类是一组具有相同属性和行为的对象的抽象。类与对象的关系是抽象和具体的关系。在C+面向对象的程序设计中,把类中的属性称为数据(数据成员),类中的操作是用函 数(函数成员)来实现的。函数体?32 .纯虚函数的一般形式如下:virtual 函数类型函数名(参数表)=0;假如一个类至少有一个纯虚函数,那么就称
3、该类为抽象类【第6章】.模板的概念模板是C+语言的一个重要特性。模板是实现代码重用机制的一种工具,它可以实现类型参数化, 即把类型定义为参数,从而实现了代码重用,使得一段程序可以用于解决多种不同类型的对象,大 幅度地提高程序设计的效率。33 .函数模板和类模板(1).函数模板与模板函数所谓函数模板,就是写一个函数模子,用这个模子套印出许多功能相同,参数类型和返回类型不 同的函数。模板函数:函数模板实例化后的具体函数。(2)类模板和模板类类模板(也称为类属类或类生成类)是:允许用户为类定义一种模子,使得 类中的某些数据成员,某些成员函数的参数或者返回值,能取任意数据类型【第7章】3 5 . C+
4、流概念:cin 对象;c o utvv对象;整型、实型、字符、字符串等有格式的输入输出36.文献的输入输出:在具有文献操作的程序中,必须有如下的预解决命令:# incl ude open close 函数文本文献、二进制文献读写。复习思考题、即考试的A、B、C、D选择题和填空题一、分清下面的概念,那些是对的的,那些是错误的1 .面向对象程序的重要结构特点之一V程序一般由类的定义和类的使用两部分组成。/程序中的一切操作都是通过向对象发送消息来 实现的。x程序中的一切操作都是通过调用函数来实现的。x程序一般由函数定义和函数的使用 两部分组成。X程序一般由变量的定义和变量的使用两部分组成。X程序一般
5、由对象的定义和对 象的使用两部分组成。X程序中的一切操作都是通过定义函数来实现的。X程序中的一切操作都 是通过定义类来实现的。2 .对象是现实世界中的一个实体,其特性V每个对象必须有一个名字,以示区别。有属性描述。V有一组操作。V创建对象时会自动调用 构造函数。X必须有一个关键字。X一定要自定义一个构造函数。X要有二个以上数据。3 .面向对象系统的特性是V抽象性 V封装性 V继承性 V多态性 X完整性X唯一性 X二义性。X安全性 4 类的概念是/对一组具有共同的属性特性和行为特性的对象的抽象。V同一类数据的集合。x类即是对象数 组。X各种对象的集合。X同一记录的集合。X同类函数的集合。X现实世
6、界中所有对象的集合。5 类和对象之间的关系是V抽象和具体的关系。类型和变量之间的关系。结构类型和结构体的关系。x定义和被定义 的关系。x调用和被调用的关系。x类即是对象数组。x型和值的关系。x指针和所指的对象的 关系。6 .构造函数的特性/构造函数的函数名与类名完全相同。V构造函数可以有形式参数。V构造函数可以重载。/在创建对象时被执行。X在程序编译时被执行。X在创建类时被执行。X在程序装入内存时被执行。X构造函数必须说明返回类型。X程序中要有调用构造函数的语句。7 .析构函数的特性V一个类中只能定义一个析构函数。V析构函数名与类名相同并加。”系统会自动调用析构函 数。X析构函数的定义只能在类
7、体内。X析构函数可以有多个参数。X一个类中能定义多个析构 函数。8 .关于成员函数特性的下述描述V成员函数可以重载。/成员函数可以设立参数的缺省值。V成员函数可以是静态的。V类定义 中只给出成员函数的原型,而成员函数在类外定义。/类定义中只给出成员函数的原型,而成员 函数在类外定义并在之前加inline。V可在类内定义。x成员函数一定要在类内定义。x成员函 数一定是内置函数。9下列的各种函数中,是本类的成员函数,构造函数 /析构函数V拷贝构造函数 V缺省参数的构造函数 x友元函数 x主函数x普通函数x标准函数.在友元函数的下面说法中,对的的是:V友元函数是独立于当前类的外部函数。x一个友元函数
8、不能同时定义为两个类的友元函数X友元函数必须在类的外部定义。X在外部定义友元函数时,必须加friend.友元的作用是什么,一个类的友元可以访问该类的什么V提高程序的运营效率。X加强类的封装性。X实现数据的隐藏性。X增长成员函数的种类V 所有成员X只能是私有成员,X只能是公有成员。X成员函数.对基类和派生类的关系描述中V派生类(如公共汽车)是基类(汽车)的子集。V派生类是基类定义的扩延。,无论哪种派生, 基类的私有成员不允许派生类的成员函数访问。V无论哪种派生,基类的公有成员允许派生类的 成员函数访问。/无论哪种派生,基类的保护成员允许派生类的成员函数访问。X派生类是基类 的具体化。X派生类是基
9、类的组合。X无论哪种派生,基类的保护成员不允许派生类的成员函数 访问。12 .派生类的对象对它的基类成员中,可以访问的是/公有继承的公有成员。x公有继承的保护成员。x公有继承的私有成员。x公有继承的所有成 员。X私有继承的公有成员。X私有继承的私有成员。X私有继承的所有成员。X私有继承的保 护成员。13 .对虚基类对的的论述V定义派生类时,在基类名前加virtuaL x定义基类时加vi rtuaL x成员函数前加 virtualo x在派生类名前加virt u a L1 5. 一个派生类有多个父类,而这多个父类又有一个共同基类,这种情况,才考虑设立虚基类, 其目的是:V消除二义性。 简化程序。
10、 提高运营效率。减少目的代码。16 . C+ +中函数可以重载:(P3T)/只要函数参数的类型不同,V或者参数的个数不同,V或者两者兼有之,两个以上函数可以同 名。17 .不可重载的函数的是:V析构函数。(可以:)普通的成员函数。友元函数。 外部函数。,.可定义作运算符重载函数的是”成员函数。V友元函数。V类以外的函数。X析构函数。X无返回值的函数。X构造函数。18 .不能重载运算符V: V? :& new + ( ) d e 1 ete.关于动态联编的描述,动态联编称为运营时的多态性是通过什么来实现的。/动态联编是以虚函数为基础的。V动态联编是在运营时拟定所调用的函数的。V动态联编调用 的函
11、数,是用基类对象的指针或对象引用所指的函数。/继承和虚函数。动态联编是在编译时拟定操作函数的。函数重载和运算符重载。运算符重载。,函数重载。19 .说白了,通过基类指针或引用来访问基类和派生类中的同名函数,才考虑虚函数。其描述:V虚函数是在基类中用virtual说明,派生类中重新定义的函数。x虚函数是一个stat i c类型 的成员函数。x虚函数是一个非成员函数。x派生类的虚函数与基类的虚函数具有不同的参数 个数和类型。2 2 .抽象类论述:/假如一个类至少有一个纯虚函数,那么该类为抽象类。V抽象类只能用作其他类的基类,不能 建立抽象类对象。V抽象类可以用来定义指针。x抽象类可以作为某个函数的
12、返回类型。2 3进行文献操作时需要包含的文献,C+用c ou t和c in进行输出/输入操作时需要包含文 献。Vf s tream. h Viostre a m. h ,stdio. h std 1 ib.h s t ri n g. h math, h24.面向对象程序设计是不同于传统程序设计的一种新的程序设计范型。面向对象的程序设计被认 为是程序设计方法学的一场实质性的革命(在导学中)。2 5.面向对象(00)程序设计是一种新的程序设计范型。这种范型的重要特性是: 程序二对象+消息.现实世界中,对象一般可以表达为:属性+行为26 .在定义类时,第一个保存字。(class)2 8.将数据结构和
13、作用于数据结构上的操作组成一个实体,数据的表达方式和对数据的操作细节 被隐藏起来,这是面向对象程序设计的(封装性)。而函数重载是(多态性)。2 9 .C+ +中类的定义内部,英文priv a te段,p r o t e cted段,Dublic段(私有段 保护段公有段)30.定义了类A,在主函数中如出现:A *p, obj, ob10;的语句。(则p是对象指针、。是对象、ob是对象数组。)31.C+的运算符: new delete (输入输出 申请 释放)3 2 .在C +定义的类中,成员可分为二类,有三个段。(数据成员 函数成员 私有 公有 保 护)33.在一个类定义中,可以声明友元,友元可
14、以是三种友元。(友元函数 友元成员 友元类)3 4. C+ +中,函数说明为void fun( i n t &i)的引用叫,(参数引用),函数说明为 voidi )的引用叫。(返回值引用)35. 继承机制允许派生类继承基类的什么,(数据和操作)同时,派生类还可以增长新的什么。 (数据和操作)3 6.类外的函数作运算符重载时,只能访问类的(公有)成员,而用类的友元运算符函数或成员 运算符函数重载可以访问类的(所有 )成员。3 7 一个类模板允许用户为类定义什么?(一个模式(子)使得类中的某些数据成员、某些成员函 数的参数或返回值,能取什么类型?(任意数据类型)3 8,模板是实现代码重用机制的一种
15、工具,函数模板的实例化、类模板的实例化分别称为(模板函 数、模板类)复习之二、阅读程序写运营结果、程序炭室(把这些程序真 正读懂,不要背答案!).函数、函数调用、函数原型(涉及参数引用、返回值的引用)1 .类的定义和定义对象(涉及对象指针).派生和继承的应用2 .派生类的构造函数和析构函数执行顺序.函数重载和运算符重载复习思考题#include int ad d(in t , int );int ma i n() int x, y, sum;coutvv 输入二个整数:;c i nxy;s um=add(xz y );coutvv x + y =v Vsum v vend 1;r e tu r
16、 n 0 ;)int a dd( i nt a z i nt b) in t c;c =a+b;return c;答案:输入二个整数:10 20x+y=30#includ e vo i d f u n 1 ( i nt i) i += 5;?vo id f un 2 (int &i) i+= 15;)v oid main() int k=10;f u n 1 ( k ); c o u t uk=k;f u n 2 (k);c o ut k =* k end 1;?答案:k=5k=151. # i nclude int &f(int & i )i + = 10;re t urn i;) int
17、main() int k = 0 ;i nt &m=f( k );c out k ,;m = 20;cout k e n d I;return 0 ;答案: 10, 20# i n c I u d e cl a ssPoint p u bl i c :Point( int xl=Oz in t yl=O) x=xl; y=yl;)v oid p r i nt();p r i vate :int x, y;?;vo id Point :print() coutx= x y=yen d I;)void print (Po int p) p.prin t ();v oid m a i n ()pri
18、nt();p 2 .pr int();prin t (p3 );)答案:x =10 y= 2 0x=30 y=0x=0 y=05.#inclu d e class Poin t public:P o i nt ( int xl=0z i nt y 1=0)x=xl; y =yl; d=x*x+y*y;)v oid pr i n t () c outx= x u y=y,r d ist=r,dend 1 ;)private:i nt x, y, d;);5.面向对象程序设计的基本特性:抽象性、封装性、继承性和多态性.抽象是通过特定的实例(对象)抽取共同性质后形成概念的过程。(1) .在面向对象程
19、序设计中,封装是指把数据和实现操作的代码集中起来放在对象内部,并尽也 许隐蔽对象的内部细节。(3),继承机制允许派生类继承基类的数据和操作(即数据成员和成员函数),也就是说,允许派生类 使用基类的数据和操作。同时派生类还可以增长新的操作和数据。从继承源上分,继承分为单继承和多继承。(4),面向对象系统的多态性是指不同的对象收到相同的消息时产生多种不同的行为方式。如可以有同名函数【第2章】6. 简朴的C+程序例2 工 计算两个整数之和s um. c pp7H?有TiT 田一inr,lnrloh、7H?有TiT 田一inr,lnrloh、/主函数/定义三个整型变量/界面:提醒用户输入二个数/从键盘
20、输入变量x的值/从键盘输入变量y的值# i ncl u d e / / 系统头文献using name s pace s t d;in t main() int x , yt sum;C o u tv v”输入二个数:“ Vcinx;c iny;su m=x4-y;输出c ou t x4-y=,sum*n,;re t u r n 0;v oid main()p r int();pl.prin t ();)答案: x=l y=0 d i s t =1x=2y=3 dist=136.#in c lu d e class Base p ub 1 i c:Base(in t n ) cout ”现在进
21、入 Base基类的构造函数n“;i = n;Base( ) cout vv”现在进入Base基类的析构函数n; void show i ( ) cou t i end 1 ; p riv a t e :i nt i;clas s Deriv e : p u bli c Base public :Der i v e (int nz i nt m): Base(m) cout ”现在进入Deri v e派生类的构造函数n”;j=n;D e r i ve() cou t vv”现在进入D e rive派生类的析构函数、vvendl; voi d sh o wj( ) coutj end 1; pri
22、vat e :int j;?;v o id main() D e rive ob j (30,40);ob j.show i ();obj. showj ();)答案:现在进入Base基类的构造函数现在进入De r i ve派生类的析构函数4030现在进入Derive派生类的析构函数现在进入Base基类的析构函数#includ e cla s s T i me char a9;p ubl i c:Time(int s=Oz int m=Oz int h=0) hou r s=h;minutes=m;se c onds= s ;)void show () c o u t 时间: vvhoursv
23、v :nmin u tesu:nse c o n d s 60)temp.seconds=t e mp.seco nd s -60;t e mp.minu t es+;)i f (temp.minut e s 6 0)t e m p .m i nutes=tem p .minute s - 6 0;temp.hou r s +; i f( t emp. hours = 24) t emp. hours= t emp.hours-2 4 ; re t urn t e mp;vo i d m a in () Time T, Tl(2 0 z23z21), T2 (10,25, 1 5), T3(5
24、, 10, 15);T=T1+T2;T.show();T=T+T3;T. show();答案:时间:2:48:30时间:3:5 8:357. #incl ud e #in elude pub lie:Str ( c ha r *pi ) p= n e w c h ars t r 1 e n (pi) + l;strepy(p, pi);void sh o w()cou t 字符串:p p ) +1;strepy ( t emp. pzthis- p ); st r c a t(tem p .p,thi s -p);th is p =n e w char 2*s t r 1 e n( t his
25、-p) +1;strcpy(th i s -p, temp, p);)void main() Str Tl( M ABCDXYZU);+ +T1;Tl.show();)答案:字符串:ABCDX YZABCDXYZ下面的程序定义一个类s a mp,有三类数据成员和一个构造函数和一个函数成员,填充 程序缺少部分,使其变成完整的C+程序。# i nc 1 u d e class Sampprotect e d:i n t b ;.p u blic:int c;(1 ) (in t nz in t m )/ /构造函数 a= n; (2); c =a+b;)int (3)(inti) /成员函数 if
26、 (i= 1 ) r etu r n a;else if ( i = = 2) retu r n b;el s e r et u r n 0;)private:i nt a;?;void main ()输出2。输出2。 S a mp obj(2O, 30);cout (4) endl;cout obj.getab (2) e ndl; 输出 30cout ( 5 ) e n d I;/输出 50)答案:(D Samp (2). b =m;(3). g e t a b(4). o b j.g e t a b (1). o b j. c1 0.下面的程序定义一个类samp,有三类数据成员和一个构造
27、函数和一个函数成员,填充 程序缺少部分,使其变成完整的C+程序。#inc 1 ud e c las s ( 1 )p ub 1 ic:int c;( 2 ) (int n, int m )/构造函数名 a=n; b=m; c= a +b;?int (char ch) /成员函数名 sw i tch (ch) ca s e a: retu rn a; b rea k;c a se b return b; bre a k;d e f a u It : return 0;private:i nt a, b;?;v oid ma i n () Mycla s s(4)(20, 30);/ /定义对象c
28、out obj. g et(* a *) e ndl;/输出 2 0c ou t o bj.getCb) end 1;/输出 30co ut (5 endl;/ /输出 50答案:(1). My class (2). My class (3). get (4). obj (5). obj. c1 1定义一个基类长方形Base,私有段有长a和宽b,公有段有构造函数,能显示长方形面 积等。定义以该长方形为底面积的派生类长方体Cubo i d,有高h,有构造函数,能显 示长方体体积。在主函数中定义长方体对象,其长、宽、高分别为10, 20, 5,显示出 长方体体积和长方形底面积。#inc 1 ude
29、 c 1 ass Base 定义长方形publ i c:B a se (float al=0, float bl= 0 )Li) /公有段构造函数体void area ( )/函数area()显示长方形面积 coutvv ”长方形面积是:vv a* b endl;)float g e tr() ;class Cuboid : public Base /定义以该长方形为底的派生类长方体public:C u boid (fl o a t al, fl o at b 1 , floa t h 1) :( 2 )/构造函数 h=hl; void f_3J()/显示长方体体积的函数 cout 公有段有构
30、造函数,能显示长方形面积 等。定义以该长方形为底面积的派生类长方体Cub。id,有高h,有构造函数,能显示长 方体体积。在主函数中定义长方体对象,其长、宽、高分别为1 0,20, 5,显示出长 方体体积和长方形底面积。#in elude classBase 定义售方形pu b lie:Base ( f Io a t al=O, flo a t bl=0) a=a 1; b=bl;/公有段构造函数体)void area ( )/函数a re a ()输出显示长方形面积 cout 长方形面积是:vv QJendl; f loat g e tr() 表达向右老:p rintf新:cout是标准输出流
31、,在程序中用于代表标准输出设备,即屏幕。运算符、vv表达向左使用c i n或cout进行I/O操作时,在程序头中头文献#include 7.函数原型(函数声明)(重点)返回值类型函数名(参数表);例27i nt a dd (in t a , i nt b);int add(int, i n t );使用在前,定义在后,要先声明。若定义在前,使用在后,就可不必声明。8 .函数重载:C+ +中,只要函数的参数的类型不同,或者参数个数不同,或者二兼有之,几个函数可 以用相同的函数名。称为函数重载. C语言用函数mall oc()和free()动态分派内存和释放动态分派的内存。C+使用运算符 n e
32、w和d e I e te能更好、更简朴地进行内存的分派和释放。9 .引用(重点)引用可为变量起别名,它重要用作函数参数以及函数的返回类型。引用有三种:(工)有变量的引用、 (2)参数引用和(3)返回值引用。11.1s & 取地址运算符取西瓜皮float h;float h;/ / h是长方体的高;void main() ob(l 0,2 0,5);/这里定义对象obL4) ;/这里调用函数,输出长方形面积(5) ;/ /这里调用函数,输出长方体体积)答案:.a *b; (2). B a se (a 1 ,bl) (3). C u b o id (4). ob.ar e a() (5). ob.
33、bo dy()4女习之三、程序设计题(把这些程序真正读懂)1 . C+基础知识.定义类、成员函数及构造函数的习题来自V C+6.0面向对象程序设计实验提纲.下面是一个c程序,改写它,使它采用C+风格的工/。语句。#include - # i n c lud e voi d main () int a,b, dzmin;printf (输入两个整数:“);- c。utvv”输入两个整数:“;s c anf(%)d%)d ”,&a,&b);*- ci n a; c i n b;min=ab?b:a;for(d=2;d=min;d + + )i f( a min)p r i n tf(没有公约数!
34、n );一 cou t VV”没有公约数! n ;e Isepr i ntf( M最小公约数是:)dn”,d); - co u tv v”最小公约数是:vvdvvend 1 ; .编C+程序,从键盘输入二个任意大小的数,在屏幕上从小到大输出这二个数。#i n clu d e void main() int a, b, c ;cina; ci n b;if(ab) c=a; a=b; b= c; couta,r vvbvvendl;)3,定义一个基类圆Circl e,私有段有圆的半径,公有段有构造函数,能显示圆面积 等。定义派生类Ex_square为圆的外切正方形,有构造函数,能显示正方形面积。
35、在主 函数中定义外切正方形对象,其圆半径为10,显示两者面积。答案:# i nclud e cl a ss Circle float r;/声明一个圆类publ i c :C i rc 1 e (float x= 0 ) r = x ; / /构造函数void a r eal ( )/函数area()显示圆面积 cou t “圆面积是:VV 3.14*r*ren d I; fl o at g etr() r e turn r; pri v ate:floa t r;?;cla s s E x_s q uare : publ i c Cir c 1 e / /派生一个圆外切正方形类p u bli
36、 c :E x_square (float x) : circ 1 e ( x ) / / 构造函数v oid a r ea2 ()/函数 area()显示正方形面积 cout ”外切正方形面积是:vv4*ge t r()*getr() ;voi d main( ) Ex_squ a re ob(10);ob. areal ();ob.area2(); 4 .【习题3.3 2】建立类Cylinde r, Cyl i n d er的构造函数被传递了两个doubl e值,分别表达圆柱体的半径和高。用类cylinder计算圆柱体的体积,并存储在一 个do u ble变量中。在类Cy 1 inde r
37、中包含一个成员函数v oL用来显示每个 Cylinder对象的体积。(数据:圆柱体的半径为2.2,高为8. 09) 答案:#inclu d e class Cyli n d e r class Cyli n d e r /声明圆柱体public:d o ubl e b)C y lind e r(double a, r = a ; h =b; v oln u me=3.1 4 1 5 9 2*r*r*h;?void vo 1()/函数vol()显示圆柱体的体积 cout 圆柱体的体积是:“vv volnumeen d 1 ;P r i vate:doubl e rf h;dou b I e v
38、ol n u m e ;);int main() Cylin d er x(2. 2, 8.0 9);x.vo I ();return 0;?5.【习题33 3建立一个类Book,其中具有两个私有数据成员qu和price, 将qu初始化为5,将pr i ce初始化为q u的10倍,建立一个有5个元素的数组 对象。显示每个对象数组元素的q u* p rice值。答案:#in c 1 ude cl a ss B o ok 声明 Book 类public:Book(int a, in t b ) q u =a; pr i c e=b; )vo i d sho w_money() c o utqu*p
39、riceendl;priva te:i nt qu, pri c e;?;int main()Book ob5 =B ook 1, 10)zBook(2,20), Bo ok(3,3O), Book (4,40) ,Boo k (5,5 0);f o r ( i n t i= 0 ; i5; i + + ) ob i.show_m o ney();r etu r n 0 ; )6 .定义一个基类建筑物Bu i Iding,私有段有楼房层数fr,房间数r,楼房总面积m, 有构造函数。定义派生类住宅楼H o use,有卧室数量b r,浴室数量dr,有构造函数, 能显示住宅楼所有数据。定义派生办公大
40、楼Offic,灭火器数量mr ,电话数量tr,有 构造函数,能显示办公大楼所有数据。在主函数中定义住宅楼对象,其楼房层数、房间数、楼 房总面积、卧室数量和浴室数量分别为10, 2 0 0,300 0 00, 500, 3 0 0。定义办公大楼对象,其楼房 层数、房间数、楼房总面积、灭火器数量和电话数量分别为18, 5 6 0, 2 500 0 0 0,1500, 60 0 , 答案:#include class Building p ublic:Bui 1 d i ng ( i nt a, int b, doub 1 e x ) f r =a; r = b; m= x; p r o t e c ted:i nt f r ; int r; d o uble m;?;clas s House : pu b lie Buildin g public:House(in t a, int b, d ouble x, i nt c t int d):Bu i Id i n g (a,b x) br= c; d r=d; void sho