C++类以及对象ppt课件.ppt
《C++类以及对象ppt课件.ppt》由会员分享,可在线阅读,更多相关《C++类以及对象ppt课件.ppt(76页珍藏版)》请在三一办公上搜索。
1、C+语言是C的扩充扩充 C 语言 C+ 语言扩充的目的:支持面向对象程序设计扩充的功能:类定义消息传递(类似函数调用)继承、虚函数,第二章 类和对象,对象与封装,对象 相对独立的实体具有表示其状态、特征的属性具有表示其行为、功能的操作封装性:只有自身操作可访问对象属性面向对象方法将分析、设计的系统和程序都抽象为对象组成的模型面向对象程序设计运行中程序实例 = 若干对象实例 + 交互控制程序 = 若干对象类(用于描述各种对象)对象类 = 程序模块C+程序 = 主函数(main) + 若干类定义,类,C+的类是把各种不同类型的数据(称为数据成员)和对数据的操作(成员函数)组织在一起而形成的用户自定
2、义的数据类型。C+中,类定义包括类说明和类实现两大部分。说明部分提供了对该类所有数据成员和成员函数的描述,而实现部分提供了所有成员函数的实现代码。,类的定义 *.h,class 类名 数据成员的说明public:方法成员的说明;,说明:类名由用户自己定,一般首字母大写默认是private,只有类中的成员函数才能访问注意:类定义的末尾有一分号注意:不能在类定义中对数据成员进行初始化 class Location int x=25,y; /ERROR ;,class Date int year,month,day;public: Date(int y,int m,int d); void setY
3、ear(int y) ; void setMonth(int m) ; void setDay(int d) ; int getYear( ); int getMonth( ); int getDay( ); ;,/ date.h类的定义,成员函数的定义,1、将成员函数的定义直接写在类中适合于成员函数规模较小的情况(内联函数)2、在类的定义体中只写出成员函数的原型说明,而成员函数的定义之后再写通常将类的定义写在一个头文件(.h文件)中,成员函数的定义写在一个程序文件(.cpp文件)中一般形式:返回类型 类名:成员函数名(参数说明)类体 ,class Date int year,month,da
4、y;public:Date(int y,int m,int d);void setYear(int y) ;void setMonth(int m) ;void setDay(int d) ;int getYear( ); int getMonth( ); int getDay( ) return day; /内联函数 ;,/date.cpp 实现部分#include date.h Date: Date(int y,int m,int d) year=y;month=m;day=d;int Date:getYear( ) return year;,int Date:getMonth( ) re
5、turn month;int Date:getDay( ) return day;,void Date:setYear(int y ) year=y;void Date:setMonth(int m ) month=m;void Date:setDay(int d ) day=d;,/exam.cpp Date类的测试程序#include #include date.hvoid main()Date k(2000,12,1);coutk.getMonth()endl;,对象创建时,为数据成员分配存储空间调用类的构造函数对象生命周期结束时,调用类的析构函数,构造函数,是一种特殊的成员函数,函数名
6、与类名相同当定义该类的对象时,构造函数将被自动调用以实现对该对象的初始化构造函数不能有返回值,因而不能指定包括void在内的任何返回值类型构造函数既可定义带参,也可义不带参一个类可定义多个构造函数,也可以不定义构造函数,没定义构造函数时,则自动建立一个空的不带参构造函数(默认构造函数),析构函数,函数名与类名相同,前有没有参数,没有返回值在类对象生命期结束时,系统自动调用一个类只可定义一个析构函数,也可以不定义如果在类的对象中分配有动态内存(如:用new申请分配的内容)时,就必须为该类提供适当的析构函数,完成清理工作,this指针,谁的成员?Date c1,c2; int Date:getYe
7、ar( ) return year; /c1 ? C2? ,this指针,C+的非静态成员函数有一个隐含参数X *const this,int Date:getYear(Date *const this) return this- year; ,c1.getYear(,例:有理数类的定义#include class CRation long n;/ 分子long d;/ 分母public:CRation( long, long ); / 构造void Print( );/ 输出void Gcd( );/ 约分;,CRation:CRation( long n, long d )/ 对象创建时被
8、调用this-n = n;/ this是指向当前对象的指针this-d = d;void CRation:Print( void )cout n / d endl;,void CRation:Gcd( )int x = n, y = d, t;if( x y )t = x; x = y; y = t; t=x%y; while( t != 0 ) x = y; y=t; t = x%y;n /= y; d /= y;,main( ) CRation r( 18, 27 );/ 分配空间,调构造函数 r.Print( ); / 输出 r.Gcd( ); / 约分 r.Print( ); ,例:动
9、态整数数组类,作为对象的数组唯一标识的实体封装数组元素、元素个数等信息责任功能按照下标的访问数组大小可变可获取元素个数,#include #include class Arrayint *pElems; int size; / 个数public:Array( int n ); / 构造Array( void ); / 析构void SetAt( int i, int v );int GetAt( int i ); / 存取int GetSize( void );,类设计要点,独立性表示独立的实体以属性表示其特征以行为表示其担负的责任(功能、服务)封装性不开放属性提供足够的方法,支持各种用途隐蔽
10、内部数据结构隐蔽方法的内部算法复用性适用性强、功能丰富,方法的实现(1/2),Array:Array( int n )/ 构造n元素的数组pElems = new int n ;/ 动态生成size = n; Array:Array( void )/ 撤消前被自动调用delete pElems;/ 释放空间int Array:GetSize( void )return size; / 获得数组大小,方法的实现(2/2),void Array:SetAt( int i, int v )/ 按下标 i 赋值 vif( i = size )/ 超过范围 int *p = new int size +
11、5 ;/ 开辟空间,复制数据 memcpy( p, pElems, size*sizeof(int) ); size+=5; delete pElems;/ 释放原数组空间 pElems = p;/ 保存首地址*(pElems + i ) = v;/ 赋值int Array:GetAt( int i )/ 按下标 i 取元素数据return i size? *(pElems + i): 0;,动态数组的使用,void main( )int n;Array x(10);/ 数组对象实例变量for( int i=0; i n;x.SetAt(i, n);for( i=0; ix.GetSize(
12、); i+ )coutx.GetAt(i) ;,程序分析,对象类 = 数据结构 + 相关函数属性 = 结构分量方法 = 作用于结构的函数对象实例变量静态构造 局部变量、全局变量动态构造 new 类名(参数表)函数定义标识所属的类可以直接访问参数和本类的数据成员函数调用通过对象实例调用其方法,消息传递,对象方法的激活使用者向对象实例发消息对象用方法函数响应消息消息的组成消息名 函数名消息属性 参数值的列表核心点使用者仅关心消息的组成对象决定哪个方法负责响应,消息传递,消息响应不同类可以有同名方法函数同类中可以有原型不同的方法消息响应方法的选择消息名 = 方法名接收消息的对象(对象类)匹配函数原型
13、(参数个数、参数类型),对象成员,一个类的对象作为另一个类的数据成员class X 类名1 成员名1 类名2 成员名2 . ;,构造函数 X:X(参数表0):成员1(参数表1),成员2(参数表2) . ,建立X类对象时,先调对象成员的构造函数,然后才执行X类的构造函数对象成员构造函数的调用顺序取决于这些对象成员在类中的说明顺序析构函数的调用顺序与构造函数相反,#include Date.hclass Student_Info int No; char Name20; char Sex; Date Birthday; public: Student_Info(int n,char *a,char
14、 s,int y,int m,int d); Student_Info( ); int GetNo( ); char * GetName( ); char GetSex( ); ;,#include Student.hStudent_Info:Student_Info(int n,char *a,char s,int y,int m,int d):Birthday(y,m,d) No=n; strcpy(Name,a); Sex=s; Student_Info:Student_Info( ):Birthday(2000,1,1) No=0; strcpy(Name,); Sex=m; ,程序结
15、构,一般分为三个文件:1)将类的说明作为头文件 .h2)将类的成员函数的实现放一个文件 .cpp3) 对类的使用放一个文件,包括main .cpp,作业:定义日期类定义描述书的类,包括书名、价格、出版日期等,第三章 继承,现实世界中的一般特殊关系人 学生人 教师类的继承学生类继承人类教师类继承人类派生类:描述特殊的属性和行为基类:描述一般的属性和行为,C+ 语言对继承的支持,class 派生类 :public 基类/特殊属性/特殊方法;派生类继承了基类的属性和方法支持软件模块的复用复用了基类的数据结构和成员函数,【例】分别定义一个描述圆的类Circle和描述一个圆柱体的类Cylinder。,#
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 以及 对象 ppt 课件

链接地址:https://www.31ppt.com/p-1375490.html