第三章类和对象(一).ppt_第1页
第三章类和对象(一).ppt_第2页
第三章类和对象(一).ppt_第3页
第三章类和对象(一).ppt_第4页
第三章类和对象(一).ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 类和对象(一),类,对象,构造函数和析构函数,3.1 类,一、类的定义,类是一种复杂的数据类型,它是将不同类型的数据和这些数据相关的运算封装在一起的复合体。,3.1 类,class public: /公有部分 private: /私有部分 protected: /保护部分 ;,说明部分,实现部分,出现的顺序和次数没有限制,3.1 类,class Date public: void Display( ); /成员函数 void SetDate( ); /成员函数 private: /数据成员,缺省为私有部分 int year, month, day; ;,3.1 类,class C ;,

2、#include “c.h” int C:fun1( ) ; void C:fun2( ) ,类界面 (c.h),类实现 (c.cpp),#include “c.cpp” void main( ) C obj; int i; i=obj.fun1( ); ,类使用A(a.cpp),二、访问权限,私有类型成员private :只允许本类中的函数访问,类外部的任何函数都不能访问。 公有类型成员public :类与外部的接口,任何外部函数都可以访问。 受保护类型成员protected :允许本类及其派生类中的函数访问,类外部的任何函数不能访问。,3.1 类,class Account public:

3、 char *name; long balance; ;/账户类,void main() Account Joe; Joe.balance=-20000; /取走20000 /Joe.balance=20000; /漏写减号 ,账户,class Account prviate: char *name; long balance; public: long getbalance(); void credit(long);/贷 void debit(long);/借 ;/账户类,#include class MyClass private: int i; protected: int j; pub

4、lic: int k; int geti() return i; int getj() return j; int getk() return k; ;,MyClass a; a.i /非法 a.j /非法 a.k /合法,三、类定义中需注意的问题,在类定义体中不允许对所定义的数据成员进行初始化。,class Date private: int month=1; int day=1; int year=1; ;,3.1 类,三、类定义中需注意的问题,数据成员可以是任何数据类型,如整型、浮点型、字符型、数组、指针、引用等,也可以是另外一个类的对象或指向对象的指针,但不能是自身类的对象。此外,数据

5、成员不能指定为自动(auto)、寄存器(register)和外部(extern)存储类型。,class A; class B private: int a; A obja1; /正确 A *obja2; /正确 B b1; /错误 auto int b; /错误 extern int c; /错误 public: ;,3.1 类,class Tpoint public: void SetPoint(int x,int y); int Xcoord( ) return X; int Ycoord( ) return Y; void Move(int xOffset,int yOffset); p

6、rivate: int X,Y; ; void Tpoint:SetPoint(int x,int y) X=x;Y=y; void Tpoint:Move(int xOffset,int yOffset) X+=xOffset;Y+=yOffset;,三、类定义中需注意的问题,3.成员函数若在类外说明时要加上类名和类作用域限定符:。,一、对象的定义和使用,汽车对象,汽车对象,汽车对象,汽车对象,汽车类,3.2 对象,一、对象的定义和使用,3.2 对象,Windows程序设计语言,窗口,菜单,按钮,对话框,程序模块,其对象通常是Windows的规范部件,对象特征是具有规范形态和操作模式,一、对

7、象的定义和使用,定义格式: ; (参数表);,如:Tpoint a1,d3,*p; Date MyBirthday(8,13,1980);,3.2 对象,一、对象的定义和使用,一般对象的成员表示如下:,. .(),如:Tpoint a1; a1.x,a1.y,a1.get( ),3.2 对象,一、对象的定义和使用,指向对象的指针的成员表示如下:, (),如: Tpoint *p; pi,pgeti( )或(*p).i,(*p).geti( ),3.2 对象,1. 假定MyClass是一个类,dd是它的一个对象,pp是指向dd的指针,cc是dd的引用,则对成员的访问,对象dd可通过 进行,指针p

8、p可通过 进行,引用cc可通过 进行。,练 习,B D B,A. : B. . C. ave=a; void printvalue( ) cout“学号”num“,平均分:”aveendl; private: int num,ave; ; void main( ) student stud1,stud2; /定义student类的两个对象 stud1.setvalue(101,85); stud2.setvalue(102,92); stud1.printvalue( ); stud2.printvalue( ); ,执行结果:101,平均分:85 102,平均分:92,二、对象的赋值运算,赋

9、值语句如下:,stud2=stud1;,3.2 对象,对象stud1,对象stud2,对象stud2,练习:编制一个小游戏。,创建一个宠物类Critter,为每一个宠物指定一个饥饿级别Hunger,并且每一个宠物都能够说出一句问候并向世界宣告自己的饥饿级别。,3.3 构造函数和析构函数,一、构造函数,1. 构造函数的需要性,变量初始化,int a=1; int *p=,结构初始化,struct student int semesHours; /总学时数 float gpa; /平均成绩 ; void fn( ) student s=100,3.5; /创建结构变量并初始化,一、构造函数,1.

10、构造函数的需要性,class student public: /公有成员 private: int semesHours; float gpa; ; void fn( ) student s=100,3.5; /error,void fn( ) s.semesHours=100; s.gpa=3.5; ,?,3.3 构造函数和析构函数,一、构造函数,1. 构造函数的需要性,class student public: void init( ) semesHours=100; gpa=3.5; private: int semesHours; float gpa; ;,void fn( ) stu

11、dent s; s.init( ); /初始化 ,?,3.3 构造函数和析构函数,一、构造函数,称为构造函数的成员函数,在定义对象的同时根据提供的参数个数和类型自动隐式地被调用,完成对象的初始化工作。构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使其具有区别于其他对象的特征。,2. 构造函数的作用,3.3 构造函数和析构函数,3. 构造函数的特点,构造函数名必须和类名相同; 构造函数没有返回值; 构造函数只能由系统自动调用,其他任何过程都 无法再调用它; 通常构造函数被定义在公有部分;,3. 构造函数的特点,构造函数名必须和类名相同; 构造函数没有返回值;

12、 构造函数只能由系统自动调用,其他任何过程都 无法再调用它; 通常构造函数被定义在公有部分; 如果没有定义构造函数系统会自动生成一个默认 的构造函数;,Time( ) hour=0; minute=0; sec=0; ,class Time public: void set_time( ); void show_time( ); private: /私有数据成员 int hour; int minute; int sec; ;,可以这样定义对象: Time worktime,bedtime; 则两个对象的数据成员都初始化为0,缺省参数的默认构造函数,3. 构造函数的特点,构造函数名必须和类名相

13、同; 构造函数没有返回值; 构造函数只能由系统自动调用,其他任何过程都 无法再调用它; 通常构造函数被定义在公有部分; 如果没有定义构造函数系统会自动生成一个默认 的构造函数; 构造函数具有普通成员函数的特征,并且可以重 载;,3. 构造函数的特点,构造函数名必须和类名相同; 构造函数没有返回值; 构造函数只能由系统自动调用,其他任何过程都 无法再调用它; 通常构造函数被定义在公有部分; 如果没有定义构造函数系统会自动生成一个默认 的构造函数; 构造函数具有普通成员函数的特征,并且可以重 载; (7)当类对象创建时,构造函数也会自动执行。,class Tpoint public: Tpoint

14、(int x1,int y1) x=x1;y=y1; void disp() cout”; a.disp(); cout”; p-disp(); ,First Point=12,6 Second Point=5,12,一、构造函数,复制构造函数常用于将一个已知对象的数据成员复制给正在创建的另一个同类的对象。复制构造函数可以像其他构造函数一样定义和使用。,4. 复制构造函数,3.3 构造函数和析构函数,类名:复制构造函数(类名 y=y1; Tpoint(Tpoint ,First Point=12,16 Second Point=12,16,练习:编制一个小游戏。,创建一个宠物类Critter,

15、为每一个宠物指定一个饥饿级别Hunger,并且每一个宠物都能够说出一句问候并向世界宣告自己的饥饿级别。要求利用构造函数宣告一个新宠物的诞生,然后由它确定新宠物的饥饿级别。,二、析构函数,析构函数的作用与构造函数正好相反,它是用来完成对象被删除前的清理工作的。通常,析构函数是在对象的生存期即将结束时,由系统自动调用的。随后这个对象就消失了,对象所占的内存空间也被释放了。,3.3 构造函数和析构函数,析构函数的特点: 析构函数名是由“” 和类名组成的; 如:Time(); 析构函数没有返回值; 析构函数没有任何参数; 通常析构函数由系统自动调用; 析构函数被定义在公有部分;,3.3 构造函数和析构函数,#include class COUNT public: COUNT( ); COUNT(

温馨提示

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

评论

0/150

提交评论