c第3章类和对象(一)

上传人:tian****1990 文档编号:73974031 上传时间:2019-01-26 格式:PPT 页数:86 大小:380.31KB
返回 下载 相关 举报
c第3章类和对象(一)_第1页
第1页 / 共86页
c第3章类和对象(一)_第2页
第2页 / 共86页
c第3章类和对象(一)_第3页
第3页 / 共86页
c第3章类和对象(一)_第4页
第4页 / 共86页
c第3章类和对象(一)_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《c第3章类和对象(一)》由会员分享,可在线阅读,更多相关《c第3章类和对象(一)(86页珍藏版)》请在金锄头文库上搜索。

1、第3章 类和对象(一),类和对象(一),类(class)是面向对象程序设计的最基本的概念,是C+最强有力的特征,是进行封装和数据隐藏的工具,它将一个数据结构与一个操作集紧密地结合起来。类对象是类的实例,用类对象模拟现实世界中的事物比用数据对象更确切。本章介绍有关类和对象的基本概念和使用方法。,3.1 类的构成,3.1.1 从结构到类 结构是C的一种自定义的数据类型,它把相关联的数据元素组成一个单独的统一体。例如下面声明了一个日期结构: struct Date int year; int month; int day; ;,例3.1有关日期结构的例子。 #include struct Date

2、int year; int month; int day; ; main() Date date1; date1.year=2003; date1.month=8; date1.day=25; coutdate1.year“.“date1.month“.“ date1.dayendl; return 0; ,class与struct的比较 类是C+对C中结构的扩展。 C语言中的struct是数据成员集合,而C+中的类,则是数据成员和成员函数的集合。 struct是用户定义的数据类型,是一种构造数据类型。类和struct一样,也是一种用户定义的数据类型,是一种构造数据类型。 C结构无法对数据进行

3、保护和权限控制,所以结构中的数据是不安全的。C+中的类将数据和与之相关联的数据封装在一起,形成一个整体,具有良好的外部接口可以防止数据未经授权的访问,提供了模块间的独立性。,3.1.2 类的构成,类的成员分两部分:一部分对应数据的状态,称为数据成员,另一部分为作用于该数据状态的函数,称为成员函数。 类声明的一般格式如下: class 类名 public: 公有数据成员; 公有成员函数; protected: 保护数据成员; 保护成员函数; private: 私有数据成员; 私有成员函数; ;,用一个类来描述日期,其形式如下: class Date public: void setDate(in

4、t y,int m,int d); void showDate(); private: int year; int month; int day; ;,3个关键字:private、protected和public,称为访问权限关键字。每个关键字下面又都可以有数据成员和成员函数。 private部分称为类的私有部分,这一部分的数据成员和成员函数称为类的私有成员。私有成员只能由本类的成员函数访问,而类外部的任何访问都是非法的。 public部分称为类的公有部分,这部分的数据成员和成员函数称为类的公有成员。公有成员可以由程序中的函数访问,它对外是完全开放的。 protected部分称为类的保护部分,

5、这部分的数据成员和成员函数称为类的保护成员。保护成员可以由本类的成员函数访问,也可以由本类的派生类的成员函数访问,而类外的任何访问都是非法的。,注 意: (1)类声明格式中的3个部分并非一定要全有,但至少要有其中的一个部分。 一般一个类的数据成员应该声明为私有成员,成员函数声明为公有成员。 (2) 类声明中的private、protected和public三个关键字可以按任意顺序出现任意次。但是,如果把所有的私有成员、保护成员和公有成员归类放在一起,程序将更加清晰。 (3) private处于类体中第一部分时,关键字private可以省略。 (4) 数据成员可以是任何数据类型,但不能用自动(a

6、uto)、寄存器(register)或外部(extern)进行声明。 (5) 不能在类声明中给数据成员赋值。C+规定,只有在类对象定义之后才能给数据成员赋初值,class abc public: private: char a=q; / 错误 int b=33; / 错误 ;,3.2 成员函数的声明,成员函数的声明通常采用以下两种方式: (1) 普通函数形式 即在类的声明中只给出成员函数的原型,而成员函数体写在类的外部。 类外定义的一般形式是: 返回类型 类名成员函数名(参数表) / 函数体 ,例如, 以下是表示坐标点的类Coord的声明。 class Coord public: void s

7、etCoord (int,int); / 设置坐标点 int getx(); / 取x坐标点 int gety(); / 取y坐标点 private: int x,y; ; void CoordsetCoord(int a,int b) x=a; y=b; int Coord:getx() return x; int Coord:gety() return y;,(2) 将成员函数以内联函数的形式进行说明。 有两种格式将成员函数声明为类的内联函数: 隐式声明 直接将函数声明在类内部。 例如: class Coord public: void setCoord(int a,int b) x=a;

8、 y=b; int getx() return x; int gety() retrun y; private: int x,y; ;, 显式声明 在类声明中只给出成员函数的原型,而成员函数体写在类的外部。为了使它起内联函数的作用,在成员函数返回类型前冠以关键字“inline”。 这种成员函数在类外定义的一般形式是: inline 返回类型 类名:成员函数名(参数表) / 函数体 ,例如上面的例子改为显式声明可变成如下形式: class Coord public: void setCoord(int,int); int getx(); int gety(); private: int x,y;

9、 ; inline void Coord:setCoord(int a,int b) x=a; y=b; inline int Coord:getx() return x; inline int Coord:gety() return y; ,(1)使用inline说明内联函数时,必须使函数体和inline说明结合在一起,否则编译器将它作为普通函数处理。 例:inline void Coord: setCoord(int ,int); 不能说明这是一个内联函数。 (2) 通常只有较短的成员函数才定义为内联函数,对较长的成员函数最好作为一般函数处理。 class Date public: voi

10、d showDate(); private: int year; int month; int day; ; inline void Date:showDate() coutyear.;month.dayendl;,说 明,3.3 对象的定义和使用,3.3.1 类与对象的关系 通常我们把具有共同属性和行为的事物所构成的集合叫做类。 在C+中,可以把相同数据结构和相同操作集的对象看成属于同一类。 在C+中,类也是一种用户自定义数据类型,类的对象可以看成是该类类型的一个实例,定义一个对象和定义一个变量相似。类与对象间的关系,可以用数据类型int和整型变量i之间的关系类比。C+把类的变量叫做类的对象

11、,对象也称为类的实例。,3.3.2 对象的定义,对象的定义,也称对象的创建 在C+中可以用以下两种方法定义对象: (1)在声明类的同时,直接定义对象。 例如: class Coord public: void setCoord(int,int); int getx(); int gety(); private: int x,y; op1,op2;,(2)声明了类之后,在使用时再定义对象 例如: class Coord / ; / main() Coord op1,op2; / ,说明: 在声明类的同时定义的对象是一种全局对象,在它的生存期内任何函数都可以使用它。 声明了一个类便声明了一种类型,

12、它并不接收和存储具体的值,只作为生成具体对象的一种“样板”,只有定义了对象后,系统才为对象分配存储空间。,3.3.3 对象中成员的访问,当定义了一个类的对象后,就可以访问对象的成员了。在类的外部可以通过类的对象对公有成员进行访问,访问对象成员要使用操作符“.”。访问的一般形式是: 对象名.数据成员名 或 对象名.成员函数名(参数表) 其中“.”叫做对象选择符,简称点运算符。,例3.2 使用类Coord的完整程序,#include class Coord public: void setCoord(int a,int b) x=a; y=b; int getx() return x; int g

13、ety() return y; private: int x,y; ; void main() Coord op1,op2; int i,j; op1.setCoord(5,6); / 调用op1的setCoord(),初始化对象op1 op2.setCoord(7,8); / 调用op2的setCoord(),初始化对象op2 i=op1.getx(); / 调用op1的getx(),取op1的x值 j=op1.gety(); / 调用op1的gety(),取op1的y值 cout“op1 i= “i“ op1 j= “jendl; i=op2.getx(); / 调用op2的getx(),

14、取op2的x值 j=op2.gety(); / 调用op2的gety(),取op2的y值 cout“op2 i= “i“ op2 j= “jendl; ,对象中成员的访问,说明: 对象名.成员名实际上是一种缩写形式,它表达的意义是: 对象名.类名:成员名 void main( ) Date date1; date1.setDate(2006,9,21); / ,对象中成员的访问,在类的内部所有成员之间都可以通过成员函数直接访问,但是类的外部不能访问对象的私有成员。 【例3.3】一个存在错误的程序 #include class Date public: void setDate(int y,in

15、t m,int d); void showDate(); private: int year; int month; int day; ;,void DatesetDate(int y,int m,int d) year=y; month=m; day=d; inline void DateshowDate() coutyear“.“month“.“dayendl; void main() Date date1,date2; cout“Date1 set and output:“endl; date1.setDate(1998,4,28); coutdate1.year“.“date1.month“.“date1.dayendl; /错误 cout“Date2 set and output:“endl; date2.setDate(2002,11,14); coutdate2.year“.“date2.month“.“date2.dayendl; /错误 ,date1.showDate(); date2.showDate();,在定义对象时,若定义的是指向对象的指针,则访问此对象的成员时,要用“-”操作符。例如: void main( ) Date *date3; date3-setDate(20

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号