c++讲义:第五章 类和对象.ppt_第1页
c++讲义:第五章 类和对象.ppt_第2页
c++讲义:第五章 类和对象.ppt_第3页
c++讲义:第五章 类和对象.ppt_第4页
c++讲义:第五章 类和对象.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 类和对象,湖南商学院 信息系 曹伟,本章内容:,类和对象的定义 成员函数的特性 静态函数 有元函数 类的作用域 局部类和嵌套类 对象的生存周期,5.1类的定义,一.类的概念 类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的运算封装在一起的集合体。类的结构是用来确定一类对象的行为,他们是通过类的内部数据结构和相关的运算来确定的。这些行为是通过一种运算接口来描述的,使用者关心的是接口的功能。,二.类的定义格式 1.组成: 说明部分和实现部分。 2.定义格式: class public : private : ; ,3.举例: 1)所有成员函数都是在类中实现。 class A

2、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.类中数据成员的类型可以是任意的。也可包含对象。同时另一个对象可以作为该类的成员。但自身类的对象是不可以的,

3、而自身类的指针或引用则是可以的。,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(floa

4、r avg) average=avg; void Printscore( ) cout“AVE=”averageendl; ;,/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对象的初始化,一.构造函数和析构函数 构造函数的功能是在创建对象时,使用给定的值来将对象初始化。析构函数的功能是用来释放一个

5、对象的,在对象删除前,用它来做一些清理工作,它与构造函数的功能正好相反。 构造函数和析构函数都没有返回值,并且定义它们时不需要显示写没有返回值。构造函数可以带参数,可以重载;而析构函数不能有参数,也不能重载。,例: class COUNT int num; public : COUNT( ); COUNT( ); void process( ); ;,COUNT : : COUNT( ) num=0; COUNT COUNT( ) cout“字符的个数:”numendl; Void COUNT: :process( ) while(getche( )!=r) num+; coutendl; V

6、oid main( ) COUNT c; cess( ); ,二.带参数的构造函数,例: 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 ,5.4成员函数的特性,一.内联函数和外联函

7、数 内联函数是指那些定义在类体内的成员函数,即该函数的函数体在放在类体内。 外联函数是说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。外联函数要转化成内联函数只需要在函数头加上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; doub

8、le 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

9、,20); coutc1.acountc1.bcountendl; coutc2.acountc2.bcountendl; coutc3.acountc2.bcountendl; ,5.5静态成员,静态成员的提出是为了解决数据共享的问题。在类中,静态成员分为静态成员和静态成员函数。 一.静态数据成员 静态数据成员是类的所有对象共享的成员,而不是某个对象的成员,它可以供所有对象公用。 1.定义: static 数据类型 静态数据成员;,2.成员初始化: 数据类型 类名:静态数据成员名=值; 注意: 静态数据成员必须进行初始化。 3.静态数据成员的引用 类名:静态数据成员名,#include Cl

10、ass Tc private: int I; static int k; public: Tc( ) I=0; I+; k+; void print( ) coutI“ ”kendl; ; 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

11、; B+=a;,Static void print(Tc C) cout“A=”C.A“B=”Bendl; ; 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 p

12、rivate : double x , y ; public : Tpoint(double a , double b) x=a; y=b;,friend double distance(Tpiont 执行结果: 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+; coutm.xen

13、dl; void print2( A m) m.x-; coutm.xendl; ; 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); 在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。,二.嵌套类 在类中嵌套的

14、类称为嵌套类,定义嵌套类的类称为外围类。 例如: 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“学号:”;,cinno; . cindegree.chinese; cindegree.english; void print( ) cout“学号:”noendl; . coutdegree.chineseendl; ; void main( ) student st; st.getdata( ); st.print( ); ,5.9对象的生存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论