c++讲义:第五章类和对象

上传人:小*** 文档编号:242967790 上传时间:2024-09-13 格式:PPT 页数:37 大小:179.50KB
返回 下载 相关 举报
c++讲义:第五章类和对象_第1页
第1页 / 共37页
c++讲义:第五章类和对象_第2页
第2页 / 共37页
c++讲义:第五章类和对象_第3页
第3页 / 共37页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第五章 类和对象,湖南商学院 信息系 曹伟,本章内容:,类和对象的定义,成员函数的特性,静态函数,有元函数,类的作用域,局部类和嵌套类,对象的生存周期,5.1类的定义,一.类的概念,类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的运算封装在一起的集合体。类的结构是用来确定一类对象的行为,他们是通过类的内部数据结构和相关的运算来确定的。这些行为是通过一种运算接口来描述的,使用者关心的是接口的功能。,二.类的定义格式,1.组成:,说明部分和实现部分。,2.定义格式:,class ,public :,private :, ;,3.,举例:,1)所有成员函数都是在类中实现。,class A, private:,int,i ;,protected:,int,j;,public :,int,k;,int Geti,( )return i;,int Getj,( )return j;,int Getk,( )return k; ;,2),成员函数在类体外定义,int,A: :,Geti,( ), return i; ,int,A : :,Getj,( ), return j; ,int,A : :,Getk,( ), return k; ,三.定义时应注意,:,1.在类体中不允许对所定义的数据成员进行初始化。,2.类中数据成员的类型可以是任意的。也可包含对象。同时另一个对象可以作为该类的成员。但自身类的对象是不可以的,而自身类的指针或引用则是可以的。,5.2 对象的定义,一.,对象的格式定义(,在类说明之后,),1.,格式:,类名 对象表列;,2. 举例:,A a1, a2 , *p , *q ;,二.对象成员的表示方法,1.格式:,对象名 . 成员名,对象名 . 成员函数名(参数表列),对象指针名 - 成员名 或,( *,对象指针名). 成员名,2.,举例:,a1. i a2.k,p-i (*p).i,a1.,Geti,( ) q-,Getk,( ) (*q).,Getk,( ),/ score.h,class,Tscore, private:,float average;,public :,void,Newscore,(,floar avg,) average=,avg,;,void,Printscore,( ) ,cout,“AVE=”average,endl,; ;,/,score.,cpp,#include ,#include “score.h”,void main( ),Tscore,s1,s2;,s1.,Newscore,(75);,s2.,Newscore,(82);,cout,“student1:”; s1.,Printscore,( );,cout,“student2:”; s2.,Printscore,( ); ,5.3对象的初始化,一.构造函数和析构函数,构造函数的功能是在创建对象时,使用给定的值来将对象初始化。析构函数的功能是用来释放一个对象的,在对象删除前,用它来做一些清理工作,它与构造函数的功能正好相反。,构造函数和析构函数都没有返回值,并且定义它们时不需要显示写没有返回值。构造函数可以带参数,可以重载;而析构函数不能有参数,也不能重载。,例:,class COUNT,int,num;,public : COUNT( );,COUNT( );,void process( ); ;,COUNT : : COUNT( ), num=0; ,COUNT COUNT( ),cout,“,字符的个数:”,num,endl,; ,Void COUNT: :process( ), while(,getche,( )!=r) num+;,cout,endl,; ,Void main( ), COUNT c;,c.process( ); ,二.带参数的构造函数,例:,Point: :,Piont,(,int,a,int,b ), x=a; y=b; ,三.拷贝初始化构造函数,功能:是用一个已知的对象来初始化一个被创建的同类的对象。它实质上也是构造函数,在初始化时被调用来将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。,例:,class,TAdd,private:,int,x,y;,public:,Tadd,(,int,a,int,b), x=a; y=b;,cout,“fun1:”,endl,; ,TAdd,(,TAdd,&p), x=p.x;y=p.y;,cout,“fun2:”,endl,; ,Tadd,( ),cout,“,调用析构函数:”,endl,; ,Int,add( ) return x+y; ;,Void main( ),TAdd,p1(2,3);,TAdd,p2(p1);,Cout,p2.add( ),endl,; ,5.4成员函数的特性,一.内联函数和外联函数,内联函数是指那些定义在类体内的成员函数,即该函数的函数体在放在类体内。,外联函数是说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。外联函数要转化成内联函数只需要在函数头加上,inline.,例:,class TA, private :,int,i;,public :,int,add(,int,a,int,b) return a+b;,int geti,( ); ;,int,TA: :,geti,( ), return i; ,二.重载函数,#,include ,class,TAdd,public :,int,add(,int,a,int,b) return a+b;,double add(double x,double y) return x+y; ;,void main(),TAdd,c;,cout,“s1=”c.add(2,3),endl,;,cout,“s2=”c.add(2.5,3.3),endl,; ,三.设置函数的默认值,#,include ,Class,Tc,private :,int,A,B;,public:,Tc,(,int,a=1,int,b=2);,int,acount,( ) return A;,int bcount,( ) return B;,Tc,: :,Tc,(,int,a,int,b), A=a; B=b; ,void main(),Tc,c1,c2(5),c3(10,20);,cout,c1.,acount,c1.,bcount,endl,;,cout,c2.,acount,c2.,bcount,endl,;,cout,c3.,acount,c2.,bcount,endl,; ,5.5静态成员,静态成员的提出是为了解决数据共享的问题。在类中,静态成员分为静态成员和静态成员函数。,一.静态数据成员,静态数据成员是类的所有对象共享的成员,而不是某个对象的成员,它可以供所有对象公用。,1.定义:,static,数据类型 静态数据成员;,2.成员初始化:,数据类型 类名:静态数据成员名=值;,注意:,静态数据成员必须进行初始化。,3.静态数据成员的引用,类名:静态数据成员名,#,include ,Class,Tc, private:,int,I;,static,int,k;,public:,Tc,( ) I=0; I+; k+;,void print( ),cout,I“ ”k,endl,; ,;,int,Tc,: :k=0;,void main( ),Tc,A,B;,A.print( ); B.print( ); ,执行该程序的结果为: 1 2,1 2,二.静态成员函数,和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。故引用时不需用对象名。,例:,#,include ,class,Tc,private :,int,A;,static,int,B;,public :,Tc,(,int,a) A=a; B+=a;,Static void print(,Tc,C),cout,“A=”C.A“B=”B,endl,; ;,int Tc,: : B=2;,void main(),Tc,M(2),N(4);,Tc,: :print(M);,Tc,: :print(N); ,执行后的结果为:,A=2B=8,A=4B=8,5.6 友元函数,友元可以是一个函数,也可以是一个类。有元的作用在于提高程序的运行效率,但是它破坏了类的封装和隐藏性。,一.有元函数,友元函数的特点是能够访问类中的私有成员的非成员函数。从语法上看,在定义和调用上与普通函数一样,。,例:,#,include ,#include ,class,Tpiont, private : double x , y ;,public :,Tpoint,(double a , double b) x=a; y=b;,friend double distance(,Tpiont,&a,Tpiont,&b), return,sqrt,(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y- b.y); ;,void main( ),Tpiont,p1(2,2), p2(5,5);,cout,“distance=”distance(p1,p2),endl,; ,执行结果:,distance=4.24264,二.有元类,当一个类作为另一个类的有元时,就意味着这个类的所有成员函数都是另一个类的有元函数。,#,include ,#include ,class A,private :,int,x;,public : A( ) x=5;,friend class B; ;,clss,B, public:,void print1( A m) m.x+;,cout,m.x,endl,;,void print2( A m) m.x-;,cout,m.x,endl,; ;,void main(), A obj1;,B obj2;,obj2.print1(obj1);,obj2.print2(obj1); ,执行结果: 6,4,5.7局部类和嵌套类,一.局部类,在一个函数体内定义的类。,例如:,int,a;,void fun( ), static,int,s;,class A,public: void,Geti,(,int,i) s=i; ;,A m;,m.,Geti,(8); ,在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。,二.嵌套类,在类中嵌套的类称为嵌套类,定义嵌套类的类称为外围类。,例如:,class A, public:,class B, public: .,private:. ;,void f( );,private:,int,a; ,类,B,是一个嵌套类,类,A,是外围类,类,B,定义在类,A,的类体内。,例如:,#,include ,class student,int,no;,char name10;,class,cdegree, public:,int,chinese,;,int english,;,int phy,; degree;,public: void,getdata,( ),cout,no;,.,cin,degree.,chinese,;,cin,degree.,english,; ,void print( ),cout,“,学号:”,no,endl,; .,cout,degree.,chinese,endl,; ;,void main( ), student,st,;,st,.,getdata,( );,st,.print( ); ,5.9对象的生存周期,对象的生存期是指对象从被创建开始到被释放为止的时间。,按生存期的不同对象可分为如下三种:,1.局部对象:在程序体 程序块中,2.静态对象:在一个文件中,3.全局对象:整个文件的所有程序中,例如:,class A, public : A(char *,st,);,A( ); . ;,void fun( ), static A,getdata,( ); /,静态成员,A object( ); ,全局对象,void main( ), a bin( ); ,局部对象,.,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!