还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
面向对象程序设计总复习(2023—夏)女习之
一、对照书本(或上课课件)上,搞懂有关概念【第0—工章】.面向对象程序设计是不同于传统程序设计的一种新的程序设计范型它对减少软件的复杂性,改善其重用性和维护性,提高软件的生产效率,有着十分重要的意义因此面向对象的程序设计被认为是程序设计方法学的一场实质性的革命(在导学中).面向对象(0・)程序设计是一种新的程序设计范型这种范型的重要特性是程序=对象+消息面向对象程序的重要结构特点是第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的对象接受到后,启动有关方法完毕相应操作3现实世界中,对象一般可以表达为:属性+行为现实世界中的对象,具有以下特性
(1)每一个必须有一个名字以区别于其他对象;
(2)用属性来描述对象的某些特性;
(3)有一组操作,每组操作决定对象的一种行为;
(4)对象的行为可以分为两类一类是作用于自身的行为,另一类是作用于其他对象的行为
4.在现实世界中,类是一组具有相同属性和行为的对象的抽象类与对象的关系是抽象和具体的关系在C++面向对象的程序设计中,把类中的属性称为数据(数据成员),类中的操作是用函数(函数成员)来实现的函数体.纯虚函数的一般形式如下virtual函数类型函数名(参数表)=0;假如一个类至少有一个纯虚函数,那么就称该类为抽象类【第6章】.模板的概念模板是C++语言的一个重要特性模板是实现代码重用机制的一种工具,它可以实现类型参数化即把类型定义为参数,从而实现了代码重用,使得一段程序可以用于解决多种不同类型的对象,大幅度地提高程序设计的效率.函数模板和类模板
(1).函数模板与模板函数所谓函数模板,就是写一个函数模子,用这个模子套印出许多功能相同,参数类型和返回类型不同的函数模板函数:函数模板实例化后的具体函数
(2)类模板和模板类类模板(也称为类属类或类生成类)是:允许用户为类定义一种模子,使得类中的某些数据成员,某些成员函数的参数或者返回值,能取任意数据类型【第7章】
35.C++流概念:cin对象;coutvv对象;整型、实型、字符、字符串等有格式的输入输出
36.文献的输入输出:在具有文献操作的程序中,必须有如下的预解决命令#includefstream.hopenclose函数文本文献、二进制文献读写复习思考题、即考试的A、B、C、D选择题和填空题
一、分清下面的概念,那些是对的的,那些是错误的.面向对象程序的重要结构特点之一V程序一般由类的定义和类的使用两部分组成/程序中的一切操作都是通过向对象发送消息来实现的x程序中的一切操作都是通过调用函数来实现的x程序一般由函数定义和函数的使用两部分组成X程序一般由变量的定义和变量的使用两部分组成X程序一般由对象的定义和对象的使用两部分组成X程序中的一切操作都是通过定义函数来实现的X程序中的一切操作都是通过定义类来实现的.对象是现实世界中的一个实体,其特性V每个对象必须有一个名字,以示区别有属性描述V有一组操作V创建对象时会自动调用构造函数X必须有一个关键字X一定要自定义一个构造函数X要有二个以上数据.面向对象系统的特性是V抽象性V封装性V继承性V多态性X完整性X唯一性X二义性X安全性4•类的概念是/对一组具有共同的属性特性和行为特性的对象的抽象V同一类数据的集合x类即是对象数组X各种对象的集合X同一记录的集合X同类函数的集合X现实世界中所有对象的集合•类和对象之间的关系是V抽象和具体的关系类型和变量之间的关系结构类型和结构体的关系x定义和被定义的关系x调用和被调用的关系x类即是对象数组x型和值的关系x指针和所指的对象的关系.构造函数的特性/构造函数的函数名与类名完全相同V构造函数可以有形式参数V构造函数可以重载/在创建对象时被执行X在程序编译时被执行X在创建类时被执行X在程序装入内存时被执行X构造函数必须说明返回类型X程序中要有调用构造函数的语句.析构函数的特性V一个类中只能定义一个析构函数V析构函数名与类名相同并加〜”系统会自动调用析构函数X析构函数的定义只能在类体内X析构函数可以有多个参数X一个类中能定义多个析构函数.关于成员函数特性的下述描述V成员函数可以重载>/成员函数可以设立参数的缺省值V成员函数可以是静态的V类定义中只给出成员函数的原型,而成员函数在类外定义/类定义中只给出成员函数的原型,而成员函数在类外定义并在之前加inlineV可在类内定义x成员函数一定要在类内定义x成员函数一定是内置函数9•下列的各种函数中,是本类的成员函数,构造函数/析构函数V拷贝构造函数V缺省参数的构造函数x友元函数x主函数x普通函数x标准函数.在友元函数的下面说法中,对的的是V友元函数是独立于当前类的外部函数x一个友元函数不能同时定义为两个类的友元函数X友元函数必须在类的外部定义X在外部定义友元函数时,必须加friend.友元的作用是什么,一个类的友元可以访问该类的什么V提高程序的运营效率X加强类的封装性X实现数据的隐藏性X增长成员函数的种类V所有成员X只能是私有成员,X只能是公有成员X成员函数.对基类和派生类的关系描述中V派生类(如公共汽车)是基类(汽车)的子集V派生类是基类定义的扩延,无论哪种派生基类的私有成员不允许派生类的成员函数访问V无论哪种派生,基类的公有成员允许派生类的成员函数访问/无论哪种派生,基类的保护成员允许派生类的成员函数访问X派生类是基类的具体化X派生类是基类的组合X无论哪种派生,基类的保护成员不允许派生类的成员函数访问.派生类的对象对它的基类成员中,可以访问的是/公有继承的公有成员x公有继承的保护成员x公有继承的私有成员x公有继承的所有成员X私有继承的公有成员X私有继承的私有成员X私有继承的所有成员X私有继承的保护成员.对虚基类对的的论述V定义派生类时,在基类名前加virtuaLx定义基类时加virtuaLx成员函数前加virtualox在派生类名前加virtuaL
15.一个派生类有多个父类,而这多个父类又有一个共同基类,这种情况,才考虑设立虚基类其目的是V消除二义性简化程序提高运营效率减少目的代码.C++中函数可以重载(P3T)/只要函数参数的类型不同,V或者参数的个数不同V或者两者兼有之,两个以上函数可以同名.不可重载的函数的是:V析构函数(可以)普通的成员函数友元函数外部函数,.可定义作运算符重载函数的是”成员函数V友元函数V类以外的函数X析构函数X无返回值的函数X构造函数.不能重载运算符VV:[]new++()de1ete.关于动态联编的描述,动态联编称为运营时的多态性是通过什么来实现的/动态联编是以虚函数为基础的V动态联编是在运营时拟定所调用的函数的V动态联编调用的函数,是用基类对象的指针或对象引用所指的函数/继承和虚函数动态联编是在编译时拟定操作函数的函数重载和运算符重载运算符重载,函数重载.说白了通过基类指针或引用来访问基类和派生类中的同名函数,才考虑虚函数其描述V虚函数是在基类中用virtual说明派生类中重新定义的函数x虚函数是一个static类型的成员函数x虚函数是一个非成员函数x派生类的虚函数与基类的虚函数具有不同的参数个数和类型
22.抽象类论述/假如一个类至少有一个纯虚函数,那么该类为抽象类V抽象类只能用作其他类的基类,不能建立抽象类对象V抽象类可以用来定义指针x抽象类可以作为某个函数的返回类型23•进行文献操作时需要包含的文献,C++用cout和cin进行输出/输入操作时需要包含文献Vfstream.h»Viostream.h,stdio.h®std1ib.hstring.hmathh
24.面向对象程序设计是不同于传统程序设计的一种新的程序设计范型面向对象的程序设计被认为是程序设计方法学的一场实质性的革命(在导学中)
25.面向对象(0・0)程序设计是一种新的程序设计范型这种范型的重要特性是程序二对象+消息.现实世界中,对象一般可以表达为属性+行为.在定义类时,第一个保存字(class)
28.将数据结构和作用于数据结构上的操作组成一个实体,数据的表达方式和对数据的操作细节被隐藏起来,这是面向对象程序设计的(封装性)而函数重载是(多态性)
29.C++中类的定义内部,英文private段,protected段Dublic段(私有段保护段公有段)
30.定义了类A在主函数中如出现A*pobjob
[10];的语句(则p是对象指针、
①是对象、ob是对象数组)
31.C++的运算符«newdelete(输入输出申请释放)
32.在C++定义的类中,成员可分为二类有三个段(数据成员函数成员私有公有保护)
33.在一个类定义中,可以声明友元,友元可以是三种友元(友元函数友元成员友元类)
34.C++中,函数说明为voidfun(inti)的引用叫,(参数引用),函数说明为voidi)的引用叫(返回值引用)
35.继承机制允许派生类继承基类的什么,(数据和操作)同时,派生类还可以增长新的什么(数据和操作)
36.类外的函数作运算符重载时,只能访问类的(公有)成员而用类的友元运算符函数或成员运算符函数重载可以访问类的(所有)成员37•一个类模板允许用户为类定义什么?(一个模式(子))使得类中的某些数据成员、某些成员函数的参数或返回值,能取什么类型?(任意数据类型)38模板是实现代码重用机制的一种工具函数模板的实例化、类模板的实例化分别称为(模板函数、模板类)复习之
二、阅读程序写运营结果、程序炭室(把这些程序真正读懂,不要背答案!).函数、函数调用、函数原型(涉及参数引用、返回值的引用).类的定义和定义对象(涉及对象指针).派生和继承的应用.派生类的构造函数和析构函数执行顺序.函数重载和运算符重载复习思考题#includeiostream.hintaddintint;intmain{intxysum;coutvv〃输入二个整数:〃;cinxy;sum=addxzy;coutvvx+y=vVsumvvend1;return0;intaddintazintb{intc;c=a+b;returnc;}答案输入二个整数1020x+y=30#includeiostream.hvoidfun1inti{i+=5;voidfun2inti{i+=15;voidmain{intk=10;fun1k;coutuk=k;fun2k;coutk=*kend1;答案k=5k=15#includeiostream.hintfintii+=10;returni;intmain{intk=0;intm=fk;coutk\;m=20;coutkendI;return0;}答案1020#incIudeiostream.hclassPoint{public:Pointintxl=Ozintyl=O{x=xl;y=yl;voidprint;private:intxy;;voidPoint::print{coutx=xy=yendI;voidprintPointp{p.print;voidmainPointp11020p230p3*p;P=P1;®p-print;p
2.print;printp3;答案x=10y=20x=30y=0x=0y=
05.#includeiostream.hclassPoint{public:Pointintxl=0zinty1=0{x=xl;y=yl;d=x*x+y*y;voidprint{coutx=xuy=yrdist=rdend1;private:intxyd;);
5.面向对象程序设计的基本特性:抽象性、封装性、继承性和多态性.抽象是通过特定的实例对象抽取共同性质后形成概念的过程.在面向对象程序设计中,封装是指把数据和实现操作的代码集中起来放在对象内部,并尽也许隐蔽对象的内部细节3继承机制允许派生类继承基类的数据和操作即数据成员和成员函数,也就是说,允许派生类使用基类的数据和操作同时派生类还可以增长新的操作和数据从继承源上分,继承分为单继承和多继承4面向对象系统的多态性是指不同的对象收到相同的消息时产生多种不同的行为方式如可以有同名函数【第2章】
6.简朴的C++程序例2•工计算两个整数之和sum.cpp#includeiostream//系统头文献usingnamespacestd;intmain{intxytsum;Coutvv”输入二个数:“Vcinx;ciny;sum=x4-y;coutx4-y=sum*\n;return0;voidmainPointp11p223z*p;P=P1;»p—print;pl.print;答案x=ly=0dist=1x=2y=3dist=
136.#includeiostream.hclassBase{pub1ic:Baseintn{cout«”现在进入Base基类的构造函数\n“;i=n;}〜Base{coutvv”现在进入Base基类的析构函数\n;}voidshowicoutiend1;}private:inti;};classDerive publicBase{public:Deriveintnzintm:Basem{cout«”现在进入Derive派生类的构造函数\n”;j=n;}〜Derivecoutvv”现在进入Derive派生类的析构函数、vvendl;}voidshowj{coutjend1;}private intj;;voidmain{Deriveobj3040;obj.showi;obj.showj;答案:现在进入Base基类的构造函数现在进入Derive派生类的析构函数4030现在进入Derive派生类的析构函数现在进入Base基类的析构函数#includeiostream.hclassTime{chara
[9];public Timeints=Ozintm=Ozinth=0{hours=h;minutes=m;seconds=s;voidshow{cout时间vvhoursvv:nminutesu:nsecondsendl;}friendTimeoperator+Time11Timet2;private:inthours;intminutes;intseconds;;Timeoperator+TimetlrTimet2{Timetemp;temp.hours=tl.hours+t
2.hours;temp.minutes=tl.minutes+t
2.minutes;temp.seconds=tl.seconds+t
2.seconds;iftemp.seconds60{temp.seconds=temp.seconds-60;temp.minutes++;iftemp.minutes60{temp.minutes=temp.minutes-60;temp.hours++;}«iftemp.hours=24temp.hours=temp.hours-24;®returntemp;}voidmain{TimeTTl20z23z21T2102515T351015;T=T1+T2;T.show;T=T+T3;T.show;}答案时间[2:48:30时间3:58:35#includeiostrearnh#ineludestring.hpublie Strchar*pi{p=newchar[str1enpi+l];strepyppi;}voidshow{cout字符串pend1;}voidoperator++;private:char*p;voidStr::operator++{Strtempu\O;temp.p=newchar[2*strIenthis-p+1];strepytemp.pzthis-p;strcattemp.pthis-p;this—p=newchar[2*str1enthis-p+1];strcpythis-ptempp;voidmain{StrTlMABCDXYZU;++T1;Tl.show;答案字符串ABCDXYZABCDXYZ下面的程序定义一个类samp有三类数据成员和一个构造函数和一个函数成员,填充程序缺少部分,使其变成完整的C++程序#inc1udeiostream.hclassSamp{protected:intb;.public:intc;1intnzintm//构造函数{a=n;2;c=a+b;int3inti//成员函数{ifi==1returna;elseifi==2returnb;elsereturn0;private:inta;;voidmainSampobj2O30;cout4endl;coutobj.getab2endl;〃输出30cout5endI;//输出50答案D・Samp
2.b=m;
3.getab
4.obj.getab
1.obj.c
0.下面的程序定义一个类samp有三类数据成员和一个构造函数和一个函数成员,填充程序缺少部分,使其变成完整的C++程序#inc1udeiostream.hclass1{pub1ic intc;2intnintm//构造函数名{a=n;b=m;c=a+b;int⑶charch//成员函数名{switchch{casea:returna;break;casebreturnb;break;defauIt:return0;}private:intab;;voidmain{Myclass42030;//定义对象coutobj.get*a*endl;//输出20coutobj.getCbend1;//输出30cout5]endl;//输出50}答案
1.Myclass
2.Myclass
3.get
4.obj
5.obj.c11・定义一个基类长方形Base私有段有长a和宽b公有段有构造函数,能显示长方形面积等定义以该长方形为底面积的派生类长方体Cuboid有高h有构造函数,能显示长方体体积在主函数中定义长方体对象,其长、宽、高分别为10205显示出长方体体积和长方形底面积#inc1udeiostream.hc1assBase{〃定义长方形public:Basefloatal=0floatbl=0Li//公有段构造函数体}voidarea//函数area显示长方形面积coutvv”长方形面积是:vva*bendl;floatgetrreturna*b;}privatefloatab;;classCuboid publicBase{//定义以该长方形为底的派生类长方体public Cuboidfloatalfloatb1floath1:2//构造函数h=hl;}voidf_3J//显示长方体体积的函数{cout长方体体积是:“vvh*getrVVendI;private floath;;voidmain{⑷oblOz2O5;〃这里定义对象ob_5J;//这里输出长方形面积ob.body;//这里输出长方体体积答案:D・a=a];b=b1;
2.Basealbl
3.body
4.Cuboid
5.ob.area
12.定义一个基类长方形Base私有段有a和宽公有段有构造函数,能显示长方形面积等定义以该长方形为底面积的派生类长方体Cubid有高h有构造函数,能显示长方体体积在主函数中定义长方体对象,其长、宽、高分别为10205显示出长方体体积和长方形底面积#ineludeiostream.hclassBase{〃定义售方形publie:BasefIoatal=Ofloatbl=0{a=a1;b=bl;//公有段构造函数体voidarea//函数area输出显示长方形面积{cout«长方形面积是vvQJ«endl;}floatgetrreturna*b;}//函数getr计算长方形面积private:floata»b;;classCuboid:pub1icBase{〃定义以该长方形为底的派生类冷方停public:Cuboidfloata1floatblf1oathl:£2//构造函数{h=hl;}voidbody//输出显示长方体体积的函数{coutvv”长方体体积是vvh*getrvvendl;private:C++新行(回车换行)\n或endl(ENDL的小写)新的输入/输出老scanf新:cin是标准输入流,在程序中用于代表标准输入设备,即键盘运算符、、表达向右老printf新cout是标准输出流,在程序中用于代表标准输出设备,即屏幕运算符、vv〃表达向左使用cin或cout进行I/O操作时,在程序头中头文献#includeiostream.h
7.函数原型(函数声明)(重点)返回值类型函数名(参数表);例2・7intadd(intaintb);intadd(intint);使用在前,定义在后,要先声明若定义在前,使用在后,就可不必声明.函数重载:C++中,只要函数的参数的类型不同,或者参数个数不同,或者二兼有之,几个函数可以用相同的函数名称为函数重载.C语言用函数malloc()和free()动态分派内存和释放动态分派的内存C++使用运算符new和deIete能更好、更简朴地进行内存的分派和释放.引用(重点)引用可为变量起别名,它重要用作函数参数以及函数的返回类型引用有三种:(工)有变量的引用、
(2)参数引用和
(3)返回值引用
11.1s取地址运算符取西瓜皮//h是长方体的高};voidmain{⑶obl0205;//这里定义对象obL4;//这里调用函数,输出长方形面积5;//这里调用函数,输出长方体体积答案⑴.a*b;
2.Basea1bl
3.Cuboid
4.ob.area
5.ob.body4女习之
三、程序设计题把这些程序真正读懂.C++基础知识.定义类、成员函数及构造函数的习题来自《VC++
6.0面向对象程序设计实验提纲》.下面是一个c程序,改写它,使它采用C++风格的工/语句#includestdio.h-#includeiostrearnhvoidmain{intabdzmin;printf输入两个整数:“;-cutvv”输入两个整数:“;scanf〃%d%d”ab;*-cina;cinb;min=abb:a;ford=2;d=min;d++ifaVbd==0bVbd==Obreak;ifdminprintf没有公约数!\n;一coutVV”没有公约数!\n;eIseprintfM最小公约数是:d\n”d;-coutvv”最小公约数是:vvdvvend1;}.编C++程序,从键盘输入二个任意大小的数,在屏幕上从小到大输出这二个数#includeiostream.hvoidmain{intabc;cina;cinb;ifab{c=a;a=b;b=c;}coutarvvbvvendl;3定义一个基类圆Circle私有段有圆的半径公有段有构造函数,能显示圆面积等定义派生类Ex_square为圆的外切正方形,有构造函数,能显示正方形面积在主函数中定义外切正方形对象,其圆半径为10显示两者面积答案#includeiostream.hclassCircle{floatr;//声明一个圆类public:Circ1efloatx=0{r=x;}//构造函数voidareal//函数area显示圆面积{cout“圆面积是:VV
3.14*r*rendI;}floatgetr{returnr;}private:floatr;;classEx_square:publicCirc1e//派生一个圆外切正方形类public:Ex_squarefloatx:circ1ex}//构造函数voidarea2//函数area显示正方形面积{cout”外切正方形面积是:vv4*getr*getrend1;};voidmain{Ex_squareob10;ob.areal;ob.area2;}
4.【习题
3.32】建立类CylinderCylinder的构造函数被传递了两个double值,分别表达圆柱体的半径和高用类cylinder计算圆柱体的体积,并存储在一个double变量中在类Cy1inder中包含一个成员函数voL用来显示每个Cylinder对象的体积数据圆柱体的半径为
2.2高为
8.09答案#includeiostream.hpublic Cylinderdoublea{r=a;h=b;volnume=
3.141592*r*r*h;voidvo1//函数vol显示圆柱体的体积{cout圆柱体的体积是:“vvvolnumeend1;}Private:doublerfh;doubIevolnume;;intmain{Cylinderx
2.
28.09;x.voI;return0;;
5.【习题3・33]建立一个类Book其中具有两个私有数据成员qu和price将qu初始化为5将price初始化为qu的10倍,建立一个有5个元素的数组对象显示每个对象数组元素的qu*price值答案#inc1udeiostream.hclassBook{〃声明Book类public:Bookintaintb{qu=a;price=b;voidshow_money{coutqu*priceendl;}private:intquprice;;intmainBookob
[5]=Book110zBook220Book33OBook440Book550};forinti=0;i5;i++ob[i].show_money;return0;
6.定义一个基类建筑物BuiIding私有段有楼房层数fr房间数r楼房总面积m有构造函数定义派生类住宅楼House有卧室数量br浴室数量dr有构造函数能显示住宅楼所有数据定义派生办公大楼Offic灭火器数量mr电话数量tr有构造函数,能显示办公大楼所有数据在主函数中定义住宅楼对象,其楼房层数、房间数、楼房总面积、卧室数量和浴室数量分别为10200300000500300定义办公大楼对象,其楼房层数、房间数、楼房总面积、灭火器数量和电话数量分别为1856025000001500600答案#includeiostream.hclassBuilding{public:Bui1dingintaintbdoub1ex{fr=a;r=b;m=x;}protected intfr;intr;doublem;;classHouse:publieBuilding{public:Houseintaintbdoublexintctintd:BuiIdingab»x{br=c;dr=d;}voidshow{cout楼房层数vvfrvvendl;cout房间数:urendl;cout楼房总面积umendI;coutvv”卧室数量vvbrvvend1;cout浴室数量”vvdrvvend1;private:intbr;intdr;;cIassOffic:pub1icBui1ding{public:Officintarintbdoublexintcintd:Bui1dingabx{mr=c;tr=d;}voidshow{cout”楼房层数n«fr«endl;cout房间数vvrvvendl;cout“楼房总面积:vvmvvendl;cout“灭火器数量:vvmrvvendl;cout”电话数量:utrendl;private:intmr;inttr;;voidmainHouseobi10200300000500300;0fficob2185602500000z1500z600;coutVV住宅楼VVendI;ob
1.show;coutvv\n办公大楼vvendl;ob
2.show;
2、*指针运算符(间接访问运算符)挖西瓜爆【第3章】.C++中说明(类的定义)类的一般形式为clsaa类名{[private](可省略)私有段数据成员和成员函数Protected:保护段数据成员和成员函数public:公有段数据成员和成员函数成员函数的定义方式第一种方式是在类定义中只给出成员函数的原形,而成员函数体在类的外部定义第二种方式是将成员函数定义在类的内部,即定义为内置函数
(1)隐式定义
(2)显式定义.类对象中成员的引用(使用、访问都是同一个意思)不管是数据成员,还是成员函数,只要是公有的,就可以被外部函数直接引用,引用的一般格式是对象名.数据成员名和对象名.成员函数名(实参表)外部函数不能引用对象的私有成员总之类成员的访问属性类的公有成员不仅可以被类中成员函数访问还可以在类的外部通过类的对象进行访问类的私有成员只能被类中成员函数访问,不能在类的外部通过类的对象进行访问.构造函数的特点1构造函数的名字必须与类名相同,否则编译程序将把它当作一般的成员函数来解决2构造函数没有返回值,在声明和定义构造函数时,是不能说明它的类型的的,甚至说明为void类型也不行3构造函数也是成员函数,与普通的成员函数同样,构造函数的函数体可写在类体内,也可写在类体外4一般不提倡在构造函数中加入与初始化无关的内容5构造函数一般声明为公有成员它不需要用户来调用,而是在建立对象时自动执行的6在实际应用中,通常需要给每个类定义构造函数假如没有给类定义构造函数,则编译系统自动地生成一个缺省的构造函数complex::complex{}//不能带任何参数7定义构造函数时,也可以是不带参数的C++允许重载构造函数,这些构造函数之间名字相同,而以它们所带参数的个类或类型的不同而区分带默认参数的构造函数对象的赋值和拷贝构造函数,其作用是,在建立新对象时,使用一个己经存在的对象去初始化这个新对象Piontp2pl;析构函数也是特殊成员函数,用于释放对象1析构函数与构造函数名字相同,但它前面必须加一个波浪号~2析构函数没有参数,也没有返回值,并且不能重载,因此在一个类中只能有一个析构函数3当撤消对象时,编译系统会自动地调用析构函数.可以用类定义对象数组类名数组名[元素个数];.当需要时,可以用类定义对象指针对象指针就是用于存放对象地址的变量类名*对象指针名;.类的封装性,使类只能通过成员函数来访问私有成员这是好事但也有一定的限制太死的感觉能否开个小孔口,必要时作个破例,使外界函数、别的类的个别成员函数、甚致别的类的所有成员函数可访问某个类的私有成员这个方法称为友元.友元涉及友元函数和友元类1友元函数分为:非成员函数作友元和别的类的成员函数作友元2友元类在类定义时,在类内说明一个类该类前面已定义,前加上friend表达该整个的一个类是本类的友元类友元类的所有成员函数可以访问它自己类私有成员又可本类的私有成员【第4章】
22.派生类的定义基类class基类名类的内容;声明派生类class派生类名继承方式基类名{//派生类新增的数据成员和函数成员;继承方式可为公有继承用public、私有继承用private或缺省和保护继承用protected.基类成员在派生类中的访问属性重点.派生类对基类成员的访问规则重点私有继承的访问规则2公有继承的访问规则3保护继承的访问规则
25.派生类的构造函数和析构函数1派生类的构造函数和析构函数执行顺序无论何中派生,当创建派生类对象时,一方面执行基类的构造函数,随后再执行派生类的构造函数;当撤消派生类对象时,则先执行派生类的析构函数,随后再执行基类的析构函数.派生类的构造函数和析构函数的构造规则简朴的派生类的构造函数一般格式为派生类名参数总表:基类名参数表派生类新增成员的初始化语句}其中基类构造函数参数,来源于派生类的构造函数的参数总表,也可以用常数值.从多个类,派生出一个类,也即一个类从多个基类继承称为多重继承多重继承的声明格式如下class派生类名继承方式1基类名1…,继承方式n基类名n(派生类新增的数据成员和成员函数;派生类继承了基类1到基类n的所有数据成员和函数成员,其访问属性规则与单继承情况同样多继承可当作单一继承的扩展.假如一个派生类有多个直接基类,而这些直接基类又有一个相同的基类,则在最低层的派生类中会保存这个间接的共同基类数据成员的多份同名成员在访问这些同名成员时会产生二义性,才考虑虚基类,虚基类在派生类中声明的形式class派生类名virtual继承方式基类名《//;通过这样的声明后,当基类通过多条派生途径被一个派生类继承时,该派生类只继承该基类一次也就是说,基类成员无、、副本〃【第5章】.编译时的多态性与运营时的多态性静态联编(前期联编)静态联编规定在程序编译时就知道调用哪个函数,就决定如何实现某一动作动态联编(后期联编、滞后联编)一直要到程序运营时才干拟定调用哪个函数系统在运营时才动态完毕的联编静态联编支持的多态性称为编译时多态性,也称静态多态性在C++中编译时多态性是通过函数重载和运算符重载实现的动态联编支持的多态性称为运营时多态性,也称动态多态性在C++中,运营时多态性是通过继承和虚函数来实现的.运算符重载C++除了可以对函数重载外还可以对大多数运算符实行重载外部普通函数类的友元函数是类的成员函数成员运算符函数定义的语法形式成员运算符函数的原型在类的内部声明格式为classX{//...返回类型operator运算符形参表;//...〉;
30.虚函数的引入,基类的指针可以指向它的公有派生类的对象,用、、指针〃才有虚函数的问题引入派生类后,由于派生类是由基类派生出来的因此指向基类的指针和指向派生类的指针是相关的1基类的指针可以指向它的公有派生类的对象但不允许指向它的私有派生类的对象2派生类的指针不允许指向它的基类的对象3基类的指针指向它的公有派生类的对象时,只能用它来直接访问派生类中从基类继承来的成员,而不能直接访问公有派生类中定义的新成员
31.有时在程序设计时,使用对象指针的目的是为了动态和灵活,即当指针指向不同对象基类对象或派生类对象时,能分别调用不同类的成员函数假如将函数说明为虚函数,就能实现这种动态调用的功能虚函数的定义是在基类中进行的virtuaI函数类型函数名形参表基类中的成员在公有派生类中的访问属性在私有派生类中的访问属性在保护派生类中的访问属性私有成员不可直接访问不可直接访问不可直接访问公有成员公有私有保护保护成员保护私有保护基类中的成员私有成员公有成员保护成员访问方式内部访问对象访问不可访问不可访问可访问不可访问可访问不可访问基类中的成员私有成员公有成员保护成员访问方式内部访问对象访问不可访问不可访问可访问可访问可访问不可访问基类中的成员私有成员公有成员保护成员访问方式内部访问对象访问不可访问不可访问可访问不可访问可访问不可访问。