




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章类与对象OOP的根本特点类和对象构造函数和析构函数类的组合抽象抽象是对具体对象〔问题〕进行概括,抽出这一类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节对一个问题的抽象应该包括两个方面:数据抽象:描述某类对象的属性或状态〔对象相互区别的物理量〕。行为抽象(功能抽象、代码抽象):描述某类对象的共有的行为特征或具有的功能。抽象的实现:通过类的声明。OOP的根本特点抽象实例——钟表数据抽象:intHour,intMinute,intSecond行为抽象:SetTime〔〕,ShowTime〔〕OOP的根本特点classClock{public:voidSetTime(intNewH,intNewM,intNewS);
voidShowTime〔〕;private:intHour,Minute,Second;};抽象实例——人数据抽象:char*name,char*sex,intage,intid行为抽象:生物属性角度:
GetCloth〔〕,Eat〔〕,Walk〔〕,…社会属性角度:
Work〔〕,Study〔〕,…OOP的根本特点封装即将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的函数代码进行有机地结合,形成“类”,其中的数据和函数都是都是类的成员。目的增强数据的平安性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。实现类声明中的{}OOP的根本特点封装实例:classClock{public:voidSetTime(intNewH,intNewM,
intNewS);
voidShowTime〔〕;private:intHour,Minute,Second;};边界特定的访问权限OOP的根本特点外部接口继承与派生是C++中支持层次分类的一种机制,允许程序员在保持原有类特性的根底上,进行更具体的说明。实现:声明派生类——第七章目的:反映特殊与一般的关系,在一般概念的根底上,派生出特殊概念,使得一般概念中的属性和行为可以被特殊概念共享,摆脱重复分析、重复开发的困境。OOP的根本特点多态性多态性是指一段程序能处理多种类型对象的能力四种形式:强制多态(通过数据类型转换实现)重载多态(通过重载函数实现)类型参数化多态(通过模板实现)包含多态(通过虚函数实现)多态:同一名称,不同的功能实现方式。目的:到达行为标识统一,减少程序中标识符的个数实现:重载函数和虚函数——第八章OOP的根本特点C++中的类在面向对象的程序设计中,程序模块是由类构成的类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括数据(属性)和函数(行为)两个主要局部。类是对逻辑上相关的函数与数据的封装。利用类可以实现数据的封装、隐藏、继承与派生。利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。类和对象类的声明形式类相当于一种用户自定义类型,声明形式:class类名称{public://公有类型公有成员〔外部接口〕private://私有类型私有成员protected://保护类型保护型成员}对类成员访问权限的控制是通过设置成员的访问控制属性来实现的。类和对象类的声明形式实例:classClock{public:voidSetTime(intNewH,intNewM,
intNewS);
voidShowTime〔〕;private:intHour,Minute,Second;};特定的访问控制权限OOP的根本特点外部接口函数成员数据成员类成员的访问控制
---公有类型成员在关键字public后面声明,它们是类与外部的接口,在类外只能访问类的公有类型成员。类成员的访问控制
---私有类型成员在关键字private后面声明,只允许本类中的成员函数访问,而来自类外部的任何访问都是非法的。如果紧跟在类名称的后面声明私有成员,那么关键字private可以省略。类成员的访问控制
---保护类型成员与private类似,其差异表现在继承与派生时对派生类的影响不同,第七章讲。类成员的访问控制成员的访问控制属性设置规那么:需要隐蔽的成员设为私有类型;提供给外界的接口设为公有类型;保护成员用来给派生类提供一些特殊的访问属性一般情况下,一个类的数据成员都应该声明为私有成员。类成员的访问控制在类的声明中,具有不同访问控制属性的成员,可以按任意顺序出现。访问控制属性关键字也可以屡次出现。但是一个成员只能具有一种访问属性。当声明了一个类之后,便可以声明该类的变量,这个变量就称为类的对象(或实例),这个声明的过程也称为类的实例化。成员数据与一般的变量声明相同,但需要将它放在类的声明体中。成员函数可以在类中说明原型,在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联成员函数。允许声明重载成员函数和带缺省形参值的成员函数。“对象名.成员函数名(实参列表)”中的“对象名”称为目的对象,成员函数中可以不使用“.”操作符,直接引用目的对象的成员。成员函数中引用其他对象的成员时需使用“.”操作符成员函数中可以访问目的对象以及其他对象的所有成员。类的成员classClock{public:
voidSetTime(intNewH,intNewM,intNewS);
voidShowTime〔〕;private:intHour,Minute,Second;};voidClock::SetTime(intNewH,intNewM,intNewS){Hour=NewH;Minute=NewM;Second=NewS;}voidClock::ShowTime〔〕{cout<<Hour<<":"<<Minute<<":"<<Second;}类和对象内联成员函数为了提高运行时的效率,对于较简单的函数可以声明为内联形式。内联成员函数体中不要有复杂结构〔如循环语句和switch语句〕。在类中声明内联成员函数的方式:将函数体放在类的声明中。称为隐式声明。使用inline关键字。称为显式声明。类和对象内联成员函数举例(一)classPoint{public:voidInit(intinitX,intinitY){X=initX;Y=initY;}intGetX〔〕{returnX;}intGetY〔〕{returnY;}private:intX,Y;};类和对象内联成员函数举例(二)classPoint{public:voidInit(intinitX,intinitY);intGetX〔〕;intGetY〔〕;private:intX,Y;};类和对象inlinevoidPoint::Init(intinitX,intinitY){X=initX;Y=initY;}inlineintPoint::GetX〔〕{returnX;}inlineintPoint::GetY〔〕{returnY;}对象类的对象是该类的某一特定实体(也称实例),即类类型的变量。声明形式:
类名对象名;例:
ClockmyClock;类和对象类中成员的访问方式类内成员互访直接使用成员名类外访问使用“对象名.成员名”方式访问
public
属性的成员类和对象例4-1类的应用举例#include<iostream.h>classClock{......//类的声明略};//......类的实现略voidmain(void){ClockmyClock;myClock.SetTime(8,30,30);myClock.ShowTime〔〕;}类和对象类的应用举例1、定义并实现一个Dog类,包含age、weight等属性,以及对这些属性操作的方法。2、定义并实现一个矩形类Rectangle,有长、宽两个属性,计算矩形的周长和面积。3、定义并实现一个矩形类Rectangle,其属性为矩形的左下角与右上角两个点的坐标,根据坐标计算矩形的周长和面积。类和对象构造函数和析构函数在声明对象的时候进行的数据成员设置称为对象的初始化。在特定对象使用结束时,还经常需要进行一些清理工作。C++程序中的初始化和清理工作分别由两个特殊的成员函数来完成,即构造函数和析构函数。构造函数和析构函数构造函数对象的建立过程:在程序的执行过程中,当遇到对象声明语句时,程序会向操作系统申请一定的内存空间用于存放新建的对象。如果希望在分配内存空间的同时将数据成员的初始值写入,即进行对象初始化,程序员要自己编写初始化程序,即构造函数。构造函数的作用是在对象被创立时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。构造函数和析构函数构造函数C++中严格规定了构造函数的接口形式,并有一套自动的调用机制。构造函数的特殊的性质:构造函数的函数名与类名相同,而且没有返回值;构造函数通常被声明为公有函数。在对象创立时由系统自动调用构造函数,这是C++程序的“例行公事”。构造函数和析构函数构造函数如果类中未声明构造函数,那么系统自动生成一个缺省形式的构造函数,其参数列表和函数体皆为空。它不做任何事。******如果类中声明了构造函数,那么系统不会再为之生成缺省的构造函数。******允许为内联函数、重载函数、带缺省形参值的函数。构造函数和析构函数构造函数举例classClock{public: Clock(intNewH,intNewM,intNewS);//构造函数 voidSetTime(intNewH,intNewM,intNewS); voidShowTime〔〕;private: intHour,Minute,Second;};构造函数的实现:Clock::Clock(intNewH,intNewM,intNewS){ Hour=NewH; Minute=NewM; Second=NewS;}建立对象时构造函数的作用:voidmain〔〕{Clockc(0,0,0);//隐含调用构造函数,将初始值作为实参c.ShowTime〔〕;}复制〔拷贝〕构造函数构造函数和析构函数生成一个对象副本的两种途径:创立一个新对象,再一一地把已有对象的成员值赋给新对象的成员让类具有自行复制本类对象的能力--复制〔拷贝〕构造函数。复制〔拷贝〕构造函数构造函数和析构函数复制〔拷贝〕构造函数是一种特殊的构造函数,其形参为本类的对象的引用。其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定),去初始化同类的一个新对象。******程序员可以根据实际问题的需要定义特定的复制构造函数,以实现同类对象之间数据成员的传递。复制构造函数的声明和实现class类名{public:类名〔形参〕;//构造函数类名〔类名&对象名〕;//复制构造函数...};类名::类名〔类名&对象名〕//复制构造函数的实现{函数体}构造函数和析构函数例4-2复制构造函数举例classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}Point(Point&p);intGetX〔〕{returnX;}intGetY〔〕{returnY;}private:intX,Y;};构造函数和析构函数Point::Point(Point&p){X=p.X;Y=p.Y;cout<<“复制构造函数被调用"<<endl;}复制构造函数什么时候被调用?第1种情况当用类的一个已存在的对象去初始化该类的另一个新建的对象时系统自动调用它实现拷贝赋值。voidmain(void){PointA(1,2);PointB(A);//或:PointB=A;//复制构造函数被调用cout<<B.GetX〔〕<<endl;}构造函数和析构函数复制构造函数什么时候被调用?第2种情况假设函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用复制构造函数。例如:voidfun1(Pointp){cout<<p.GetX〔〕<<endl;}voidmain〔〕{PointA(1,2);fun1(A);//调用复制构造函数}构造函数和析构函数注意:只有值传递时,才会调用复制构造函数;假设是引用传递,那么不会调用复制构造函数。复制构造函数什么时候被调用?第3种情况当函数的返回值是类对象时,系统自动调用复制构造函数。例如:Pointfun2(){PointA(1,2);returnA;//调用复制构造函数}voidmain〔〕{PointB;B=fun2();}构造函数和析构函数默认的复制构造函数如果程序员没有为类声明复制构造函数,那么编译系统就会在必要时自动生成一个默认的复制构造函数。功能:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。构造函数和析构函数40默认的复制构造函数voidmain(){PointA(1,2);
PointB=A;//默认的复制构造函数cout<<B.GetX()<<endl;cout<<B.GetY()<<endl;}#include<iostream.h>classPoint{public:Point(intxx=0,intyy=0)
{X=xx;Y=yy;}intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};编译系统自动生成的默认复制构造函数直接将原对象的数据成员值一一赋值给新对象中对应的数据成员。有必要编写复制构造函数吗?复印机:可以用白纸遮住不需要的局部再复印;还有放大复印、缩小复印等多种模式!在程序中进行对象的有选择、有变化地复制时,必须编写复制构造函数。当类的数据成员中有指针类型时,要实现正确的复制,必须编写复制构造函数。〔6.5深复制与浅复制P226〕。构造函数和析构函数析构函数完成对象被删除前的一些清理工作。在对象的生存期即将结束的时刻系统自动调用它,释放此对象所占用的内存空间。调用完成之后,对象也就消失了。析构函数也是类的一个公有函数成员。析构函数的名称由类名前面加“~”构成,它不接受任何参数,也没有返回值,但可以是虚函数。如果程序中未声明析构函数,编译器将自动产生一个缺省的不做任何事的析构函数。构造函数和析构函数构造函数和析构函数举例#include<iostream.h>classPoint{public:Point(intxx,intyy);~Point〔〕;//...其它函数原形private:intX,intY;};构造函数和析构函数Point::Point(intxx,intyy){X=xx;Y=yy;}Point::~Point〔〕{}//...其它函数的实现略
一般来讲,如果希望程序在对象被删除之前的时刻自动(不需要人为进行函数调用)完成某些事情,就可以把它们写到析构函数中。#include<iostream.h>constfloatPI=3.14159;constfloatFencePrice=35;constfloatConcretePrice=20;//Circle类的声明classCircle{private:floatradius;public:Circle(floatr);//构造函数floatCircumference〔〕const;//周长floatArea〔〕const;//面积};//Circle类的实现Circle::Circle(floatr){radius=r;}//计算圆的周长floatCircle::Circumference〔〕{return2*PI*radius;}//计算圆的面积floatCircle::Area〔〕{returnPI*radius*radius;}例4-3
类的应用举例一圆型游泳池如下图,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。编程计算并输出过道和栅栏的造价。游泳池过道//Circle类的使用voidmain〔〕{floatradius;floatFenceCost,ConcreteCost;//FenceCost栅栏造价ConcreteCost过道造价cout<<"Entertheradiusofthepool:";//提示用户输入半径cin>>radius;//声明Circle对象CirclePool(radius);CirclePoolRim(radius+3);//计算栅栏造价并输出FenceCost=PoolRim.Circumference〔〕*FencePrice;cout<<"FencingCostis¥"<<FenceCost<<endl;
//计算过道造价并输出ConcreteCost=(PoolRim.Area〔〕-Pool.Area〔〕)*ConcretePrice;cout<<"ConcreteCostis¥"<<ConcreteCost<<endl;}464.4类的组合47组合的概念对于复杂的问题,可以将其分解、抽象成假设干个简单问题,每个简单问题用一个部件类来描述,然后将部件类的对象有机组合,就形成描述原复杂问题的类,这样的情况称为类的组合。类的组合,描述的就是一个类内嵌其它类的对象作为数据成员的情况。即:类中的数据成员是另一个类的对象。可以在已有的抽象的根底上实现更复杂的抽象。类的组合举例〔二〕classPart//部件类{public:Part〔〕;Part(inti);~Part〔〕;voidPrint〔〕;private:intval;};classWhole//整体类{public:Whole〔〕;Whole(inti,intj,intk);~Whole〔〕;voidPrint〔〕;private:Partone;Parttwo;intdate;};类的组合Whole::Whole〔〕{date=0;}Whole::Whole(inti,intj,intk):two(i),one(j),date(k){}//...其它函数的实现略intmain(){WholeW1;WholeW2(10,5,20);W1.print();W2.print();return0;}举例classPoint{private:floatx,y;public:Point(floatxx,floatyy);floatGetX();floatGetY();};//...函数的实现略类的组合classLine{private:
Pointp1,p2;
doublelen;
public:Line(Pointa,Pointb);
Line(Line&l);
doubleGetLen();};//...函数的实现略类组合的构造函数设计当创立组合类的对象时,各个内嵌对象也被自动创立。原那么:不仅要负责对本类中的根本类型成员数据赋初值,也要对内嵌对象成员初始化。定义形式:类名::类名(对象成员所需的形参,本类成员形参):内嵌对象1(形参表),内嵌对象2(形参表),......{本类成员数据初始化}类的组合初始化列表作用:对内嵌对象成员进行初始化对根本类型的数据成员也可以如此初始化。类组合的构造函数调用构造函数调用顺序:先调用内嵌对象的构造函数〔按内嵌时的声明顺序,先声明者先构造〕。然后调用本类的构造函数。假设调用默认构造函数〔即无形参的〕,那么内嵌对象的初始化也将调用相应的默认构造函数。注意:有些数据成员的初始化〔如:没有默认构造函数的内嵌对象、引用类型的数据成员〕,必须在构造函数的初始化列表中进行,这时必须编写显式的构造函数。析构函数的调用顺序与构造函数刚好相反。类的组合类的组合举例〔二〕classPart//部件类{public:Part〔〕;Part(inti);~Part〔〕;voidPrint〔〕;private:intval;};classWhole//整体类{public:Whole〔〕;Whole(inti,intj,intk);~Whole〔〕;voidPrint〔〕;private:Partone;Parttwo;intdate;};类的组合Whole::Whole〔〕{date=0;}Whole::Whole(inti,intj,intk):two(i),one(j),date(k){}//...其它函数的实现略intmain(){WholeW1;WholeW2(10,5,20);W1.print();W2.print();return0;}如果要为组合类编写拷贝构造函数,那么需要为内嵌成员对象的拷贝构造函数传递参数。类的组合组合类的拷贝构造函数设计#include<iostream.h>#include<math.h>classPoint //Point类定义{public: Point(intxx=0,intyy=0){X=xx;Y=yy;} Point(Point&p); intGetX(){returnX;} intGetY(){returnY;}private: intX,Y;};Point::Point(Point&p) //拷贝构造函数的实现{ X=p.X; Y=p.Y; cout<<"Point拷贝构造函数被调用"<<endl;}类的组合举例---线段(Line)类classLine//类的组合Line类的定义{public: //外部接口
Line(Pointxp1,Pointxp2);
Line(Line&);doubleGetLen(){returnlen;}private: //私有数据成员
Pointp1,p2; //Point类的对象p1,p2doublelen; };Line::Line(Pointxp1,Pointxp2):p1(xp1),p2(xp2){cout<<"Line构造函数被调用"<<endl;doublex=double(p1.GetX()-p2.GetX());doubley=double(p1.GetY()-p2.GetY());len=sqrt(x*x+y*y);}//组合类的构造函数Line::Line(Line&L):p1(L.p1),p2(L.p2){cout<<"Line拷贝构造函数被调用"<<endl;len=L.len;}//组合类的拷贝构造函数voidmain(){Pointmyp1(1,1),myp2(4,5);//定义Point类的对象Lineline(myp1,myp2); //定义Line类的对象Lineline2(line); //定义Line类的对象cout<<"ThelengthoftheLineis:";cout<<line.GetLen()<<endl;cout<<"ThelengthoftheLine2is:";cout<<line2.GetLen()<<endl;}前向引用声明C++的类应该先声明,后使用。如果需要在某个类的声明之前引用该类,那么应进行前向引用声明。前向引用声明只为程序引入一个类名标识符,具体声明在其它地方。前向引用声明举例classB;//前向引用声明classA{public:voidf(Bb);};classB{public:voidg(Aa);};注意:尽管使用了前向引用声明,但是在提供一个完整的类声明之前,不能声明该类的对象,也不能在内联成员函数中使用该类的对象。前向引用声明举例classB;//前向引用声明classA{
Bb;//×B类定义尚未完善};classB{Aa;};注意:尽管使用了前向引用声明,但是在提供一个完整的类声明之前,不能声明该类的对象。***当使用前向引用声明时,只能使用被声明的符号,而不能涉及类的任何细节。前向引用声明举例classB;//前向引用声明classA{B&b;//√经过前向引用声明,可以声明B类的对象引用或指针public:
voidfun(){b.show();}
//×B类对象在定义之前被使用};classB{Aa;public:
voidshow();};注意:尽管使用了前向引用声明,但是在提供一个完整的类声明之前,不能在内联成员函数中使用该类的对象。4.6结构体和联合体结构体是一种特殊形态的类,结构体和类的唯一的区别:结构体和类具有不同的默认访问控制属性。联合体也是一种特殊形态的类,注意联合体的限制4.7综合实例---个人银行帐户管理程序总结面向对象的思想:通过抽象,封装,继承和多态等手段,到达程序源代码最大限度的可重用和可扩充性。面向对象程序设计方法就是运用面向对象的观点来描述现实问题,然后用计算机语言来描述并处理该问题。这种描述和处理是通过类与对象实现的,是对现实问题的高度概括,分类和抽象。这样的程序,数据和操作很好地封装在对象中,数据的访问权限也可以得到有效的控制,数据结构和格式的改变只是局限于拥有该数据的对象和类中,因此修改也很方便。同时,通过由现有的类进行派生,可以得到更多具有特殊功能的新类,对更为复杂的问题进行描述,到达对现有源代码的最大限度的重用,实现类软件的产业化。类是逻辑上相关的函数与数据的封装,它是对所要处理的问题的抽象描述。访问控制属性控制着使用者对类的成员的访问权限,正是这一手段,实现了对数据的保护。公有类型(public)—公有类型定义了类的外部接口。私有类型(private)—私有类型的成员只允许本类的成员函数访问,而类外部的任何访问都是非法的,这样,私有成员就整个隐藏在类中,在类的外部根本就无法看到。保护类型(protected)—保护类型的性质和私有类型的性质相似,其差异在于继承和派生时派生类的成员函数可以访问基类的保护成员。类实际上是一种抽象机制,它描述了一类问题的属性和行为,没有具体值。而类的对象就是具有该类类型的某一特定实体〔实例〕,类与对象的关系相当于简单数据类型与变量的关系。对象在定义的时候可以进行数据成员设值称为对象的初始化—构造函数。对象在使用结束时可以进行相关的清理工作—析构函数。构造函数的作用就是在对象被创立时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征。构造函数完成的是一个从一般到具体的过程,它在对象被创立的时候由系统自动调用。拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。其作用是使用一个已经存在的对象去初始化一个新的同类对象。如果用户没有声明类的拷贝构造函数,系统就会自动生成一个缺省函数,这个缺省拷贝构造函数的功能是把已有对象的每个数据成员的值都复制到新建立的对象中。拷贝构造函数在以下三种情况下都会被调用:
(1)当用类的一个对象去初始化该类的另一个对象时。(2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时。(3)如果函数的返回值类型是类的对象,函数调用完成返回时。析构函数和构造函数的作用几乎正好相反,它用来完成对象被删除前的一些清理工作。析构函数是在对象的生存期即将结束的时刻由系统自动调用的。析构函数不接受任何参数。对于复杂的问题,可以将其逐步划分为一系列稍为简单的问题,每个问题用一个类来描述,然后子类的对象有机组合,就形成描述原问题的类,这样的情况称为类的组合。类的组合,描述的就是一个类内嵌其它类的对象作为成员的情况。当创立类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象也被自动创立。一般来讲在创立对象时既要对本类的根本数据成员进行初始化,又要对内嵌对象成员进行初始化。C++的类应领先声明,再使用,但是在处理相对复杂的问题,考虑类的组合时,很可能遇到两个类相互引用的情况,此时,就必然要有一个类在定义之前就被引用,解决这一问题的方法是使用前向引用声明。
模板是C++支持参数化多态性的工具。所谓参数化多态性,就是将程序所处理的对象类型参数化,使得一段程序可以用于处理多种不同类型的对象。类模板使用户可以定义一种模式,使得类中某些数据成员,某些成员函数的参数,某些成员函数的返回值能取任意类型作业复习第四章,预习第五章4-8,4-9,4-10,4-11,4-12,4-13,4-14实验四OOP的根本特点抽象是对具体对象〔问题〕进行概括,抽出这一类对象的公共性质并加以描述的过程。对一个问题的抽象应该包括数据抽象、行为抽象两个方面。抽象的实现:通过类的声明。封装即将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的函数代码进行有机地结合,形成“类”,其中的数据和函数都是都是类的成员。封装的实现:类声明中的{}OOP的根本特点继承与派生反映特殊与一般的关系,在一般概念的根底上,派生出特殊概念,使得一般概念中的属性和行为可以被特殊概念共享。多态性是指一段程序能够处理多种类型对象的能力。多态性可以通过强制多态(通过数据类型转换实现)、重载多态、类型参数化多态(通过模板实现)、包含多态(通过虚函数实现)4种形式来实现。c++中的类类是对逻辑上相关的函数与数据的封装,它是对问题的抽象描述,是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括数据(属性)和行为两个主要局部。class类名称{public://公有类型公有成员〔外部接口〕private://私有类型私有成员protected://保护类型保护型成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学期中班级的适应性调整计划
- Unit 2 School things Lesson 5(教学设计)-2024-2025学年人教精通版英语三年级上册
- 论语翻译工作总结
- 2025年水分湿度传感器项目合作计划书
- 八年级语文下册 十四像山那样思考教学实录设计 长春版
- 开店股权合作协议
- 新员工延期转正评语
- 2025年高压清洗车项目建议书
- 2025年货运资格证题库及答案大全
- 2025年农村房屋转让协议书模板 双方
- 矿井一通三防课件
- 学生学籍异动申请表(模板)
- DBJ50∕T-029-2019 地质灾害防治工程设计标准
- 五年级《红楼梦》读后感500字6篇
- 前期物业介入主要工作计划表
- 电动机检查(抽芯)记录
- (WORD版可修改)JGJ59-2023建筑施工安全检查标准
- 人教版初一七年级下册数学课时练《5.3.2 命题、定理、证明》试题试卷
- 成人心肺复苏(双人)课件
- (高职)国际贸易理论与实务ppt课件(完整版)
- 《民航地面服务与管理》项目六课件
评论
0/150
提交评论