1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,上课啦,1,第,4,章 类与对象,4.1,类与对象,4.2,构造函数与析构函数,4.3,类的组合,4.4,友元,4.5,静态成员,4,.,6,常对象与常成员函数,4.7,对象数组与对象指针,4.8 this,指针,2,4.1.1,类与对象的概念,结构化程序设计,基本单位是函数,面向对象程序设计,基本单位是类,3,4.1.1,类与对象的概念,对象,(object),:,是现实世界中的客观事物。,描述客观事物必须,用不同的数据类型,来描述,不同的方面,。如商品:,商品名称(用字符串描述),该商品数量(用
2、整型数描述),该商品单价(用浮点数描述),该商品总价(用浮点数描述)。,这里用了属于三种不同数据类型的四个数据成员(,data member,)来描述一种商品。,4,类,(class),是一种数据类型,。可以用来描述客观事物。,类,把具有相同属性的客观事物划分为一类,从而得出的抽象概念,抽象性,类与对象的关系,对象是类的,实例,,类是同种类对象的,抽象,。,4.1.1,类与对象的概念,5,例如:确定大小和颜色的矩形(是指打印到屏幕上的矩形)都是一个个具体的对象,而将所有矩形的共同特点抽象出来,就是一个,矩形类,。,这些共有的,属性,包括颜色,(,color,),,左上角坐标,(,left,to
3、p,),,长,(,length,),和宽,(,width,),等;,对这些属性的,处理操作,包括改变矩形的颜色,(,SetColor,),和大小,(,SetSize,),,移动矩形到新的位置,(,Move,),,绘出矩形,(,Draw,),等。,4.1.1,类与对象的概念,6,将上述矩形的这些,属性,和,方法,作为一个整体,,封装,在一起形成一个矩形类。,面向对象程序设计(,Object Oriented Programming,)中的类,是具有,相同,属性,(,数据成员,),和,相同,方法,(,成员函数,),的一组对象的抽象,它为属于该类的全部对象提供了抽象的描述。,4.1.1,类与对象的概
4、念,数据成员,成员函数,类的构成,函数可访问数据,也可访问函数,7,class,类名,private,:,私有,数据成员和成员函数;,protected,:,保护,数据成员和成员函数;,public,:,公有,数据成员和成员函数;,;,/,最后的分号不可少,这是一条说明语句,4.1.2,类的声明,关键字,class,命名习惯,8,例,4.1,定义一个长方形类,CRect,。其,数据成员,包括颜色,左上角坐标,长和宽;其,成员函数,包括改变矩形的颜色,(,SetColor,),和大小,(,SetSize,),,移动矩形到新的位置,(Move),,绘出矩形,(Draw),。,class,CRect
5、private:,char color10;,int,left;,int,top;,int,length;,int,width;,public:,void,SetColor(char,*c);,void,SetSize(int,l,int,w);,void,Move(int,t,int,l);,void Draw();,;,在这里只是申明成员函数,9,例,4.1,(续一),void,CRect,:,SetColor,(char,*c),strcpy(color,c);,void,CRect,:,SetSize,(int,l,int,w),length=l;,width=w;,void,CRe
6、ct,:,Move,(int,t,int,l),top=t;,left=l;,void,CRect,:,Draw,(),cout,矩形左上角坐标为,(left ,top ),endl,;,cout,矩形长和宽分别为,length ,width,endl,;,cout,矩形的颜色是,color,endl,;,访问了数据成员,color,10,例,4.1,(续二),void main(),CRect,r;,r.SetColor(Red,);,r.Move(10,20);,r.SetSize(100,200);,r.Draw,();,r.Move(50,50);,r.SetColor(Blue,);
7、r.Draw,();,定义,CRect,类的对象,定义对象的格式:,类名 对象名,1,对象名,2,;,结果为,:,矩形左上角坐标为(,20,,,10,),矩形长和宽分别为,100,,,200,矩形的颜色是,Red,矩形左上角坐标为(,50,,,50,),矩形长和宽分别为,100,,,200,矩形的颜色是,Blue,公有数据成员与公有成员函数的访问,对象名,.,公有数据成员,对象名,.,公有成员函数,(,参数列表,),11,4.1.4,类的成员函数,类成员函数的定义方式,在类外部定义:,函数类型 类名,:,成员函数名(参数说明),函数体,在类中定义:,class,CRect,public:,v
8、oid,SetColor,(char*c),strcpy,(color,c);,;,成员函数的实现,写在类内部,12,4.1.4,类的成员函数,(,续一,),2.,内联成员函数,直接在类中定义成员函数,即成为内联成员函数,或在类外定义成员函数时用,inline,指出:,如,:,inline void,CRect:SetColor(char,*c),strcpy(color,c);,*,13,3.,带默认参数值的成员函数,注意:,默认参数只能在声明或定义中的一处给出,即,在类中的函数声明给出默认参数值:,void,SetSize(int,l=100,int,w=100);,在定义时给出默认值:,
9、void,CRect:SetSize(int,l=100,int,w=100),length=l;,width=w;,如何调用?,几种调用形式?,4.1.4,类的成员函数,(,续二,),14,4.1.3,成员的访问控制,private,:,私有访问权限,只允许类中的成员函数访问,其他函数不能访问。,protected,:,保护访问权限,本类及派生类的成员函数可访问。,public,:,公有访问权限,在任何函数中都可以访问。,例:有例,4.1,的程序若主函数中有以下语句,是否正确?,CRect,r;,strcpy,(,r.color,“red”);,r.top,=10;,r.left,=20;,
10、15,4.1.3,成员的访问控制(续),若不指定类中的成员的访问权限,则,默认为私有成员,。,类也可以由,struct,关键字声明,struct,与,class,的区别是:如果不指定访问权限,前者缺省的访问权限是公有的,而后者是私有的。,用,struct,声明前面的矩形类:,struct,CRect,void,SetColor(char,*c);,void,SetSize(int,l,int,w);,void,Move(int,t,int,l);,void Draw();,private:,char color10;,int,left;,int,top;,int,length;,int,width;,;,*,16,






