C程序设计第8章类与对象.ppt
《C程序设计第8章类与对象.ppt》由会员分享,可在线阅读,更多相关《C程序设计第8章类与对象.ppt(37页珍藏版)》请在三一办公上搜索。
1、1,第8章 类与对象,教学内容 8.1 类和对象 8.2 构造函数和析构函数 8.3 对象数组和对象指针 8.4对象的动态建立和释放,2,8.1 类和对象,类是C+中十分重要的概念,它是实现面向对象程序设计的基础。类是所有面向对象语言的共同特征,所有面向对象的语言都提供了这种类型。一个有一定规模的C+程序是由许多类所构成的。对象=算法+数据结构 程序=(对象+对象+对象+)+消息 或:程序=对象s+消息“对象s”表示多个对象。消息的作用就是对对象的控制。程序设计的关键是设计好每一个对象,以及确定向这些对象发出的命令,使各对象完成相应操作。,3,8.1类和对象类的声明和对象的定义,1类和对象的关
2、系 每一个实体都是对象,有一些对象具有相同的结构和特性,每个对象都属于一个特定的类型。在C+中,对象的类型称为类,类代表了某一批对象的共性和特征。前面已说明,类是对象的抽象,而对象是类的具体实例。如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量,同一个结构体类型可以定义出多个不同的结构体变量。在C+中也是先声明一个类类型,然后用它去定义若干个同类型的对象,对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。在一开始时就弄清对象和类的关系是十分重要的。,4,8.1类和对象类的声
3、明和对象的定义,2声明类类型 类是用户自己指定的类型。如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。C+标准本身并不提供现成的类的名称、结构和内容。在C+中声明一个类类型和声明一个结构体类型是相似的。,class 类名public:/成员访问限定符 公有的数据成员和成员函数;private:私有的数据成员和成员函数;protected:受保护的数据成员和成员函数;,(1)用public声明的成员在类的内、外都可以使用。(2)用private声明的成员只能在类的内部使用。(3)用protected声明的成员可以在类的内部使用,也可以被派生类的成员函数(后代)使用。,
4、5,struct Student/声明了一个名为Student的结构体类型int num;char name20;char sex;Student stud1,stud2;/定义了两个结构体变量stud1和stud2,class Student/以class开头int num;char name20;char sex;/以上3行是数据成员void display()/这是成员函数 cout num:num endl;cout name:name endl;cout sex:sex endl;/以上4行是函数中的操作语句;Student stud1,stud2;/定义了两个类对象stud1和st
5、ud2,可以将上面类的声明改为:class Student/声明类类型private:/声明以下部分为私有的int num;char name20;char sex;public:/声明以下部分为公有的void display()cout num:num endl;cout name:name endl;cout sex:sex endl;Student stud1,stud2;/定义了两个类对象stud1和stud2,6,8.1类和对象类的声明和对象的定义,3类和结构体的异同 C+增加了类类型后,仍保留了结构体类型(struct),而且把它的功能也扩展了。C+允许用struct来定义一个类类
6、型。,(1)如果用class定义类,若既不指定public也不指定private,则系统默认为private。(2)如果用struct定义类,若既不指定public也不指定private,则系统默认为public。,7,#include class Complexprivate:double r;double i;public:void init(double rr,double ii)r=rr;i=ii;double real()return r;double image()return i;,void main()Complex a;a.init(2,3);couta.real()+“a.
7、image()iendl;a.r=6;/错误,a.i=3.2;/错误,8,数据成员可以是任何数据类型,如整型、浮点型、字符型、数组、指针、引用等,也可以是另外一个类的对象或指向对象的指针,还可以是指向自身类的指针或引用,但不能是自身类的对象。此外,数据成员不能指定为自动(auto)、寄存器(register)和外部(extern)存储类型。例如:class A;class B private:int a;A obja1;/正确A*obja2;/正确B*objb,9,在声明(或定义)类时,不能为数据成员赋初值。例如:class Aprivate:int a=0;/错误int b3=1,2,3;/
8、错误public:;,10,8.1类和对象类的成员函数,1成员函数的定义在类定义体中给出函数的声明,说明函数的参数表和返回值类型,在类定义之外给出函数的具体实现,这是一般成员函数的定义方法。与普通函数不同的是,类外定义成员函数时要指明类的名称,具体形式为:返回值类型 类名函数成员名(参数表)函数体,可以将上面类的声明改为:class Student/声明类类型private:/声明以下部分为私有的int num;char name20;char sex;public:/声明以下部分为公有的void display();void Student:display()cout num:num end
9、l;cout name:name endl;cout sex:sex endl;,再如:下面的时钟类定义class Clockpublic:void SetTime(int NewH,int NewM,int NewS);private:int Hour,Minute,Second;public:void ShowTime();,11,8.1类和对象类的成员函数,2带缺省值的成员函数 前面讲过带缺省形参值的函数,同样,类的成员函数也可以有缺省形参值,其调用规则与普通函数相同。在实际问题中,有时候这个缺省值可以带来很大的方便。例如,时钟类的函数SetTime()就可以使用缺省值。,void Se
10、tTime(int NewH=10,int NewM=1,int NewS=10);/在定义函数时,如果不指定类名,又不放在类中,就是普通函数,此处的函数是放在类中的成员函数 Hour=NewH;Minute=NewM;Second=NewS;/函数调用时,如果不给出实参,就把时间设置为10:1:10,12,8.1类和对象类的成员函数,3内联成员函数内联成员函数的声明有两种方式隐式声明和显式声明。将函数体直接放在类定义体内,这种方法称之为隐式声明。例如,将时钟类的函数ShowTime声明为内联成员函数,可以显式声明写作:inline void ClockShowTime()cout Hour:
11、Minute:Second endl;,还可以隐式声明为:class Clockpublic:void SetTime(int NewH,int NewM,int NewS);void ShowTime()cout Hour:Minute:Second endl;private:int Hour,Minute,Second;,13,内联成员函数,#includeclass pointprivate:int x,y;public:void setpoint(int,int);int getx();int gety();inline void point:setpoint(int a,int b)
12、x=a;y=b;inline int point:getx()return x;inline int point:gety()return y;main()int x=9,y=20;point p1;p1.setpoint(x,y);coutpoint.x=p1.getx()endl;coutpoint.y=p1.gety()endl;,#includeclass pointprivate:int x,y;public:void setpoint(int a,int b)x=a;y=b;int getx()return x;int gety()return y;main()int x=9,y=
13、20;point p1;p1.setpoint(x,y);coutpoint.x=p1.getx()endl;coutpoint.y=p1.gety()endl;,14,8.1类和对象类的成员访问控制,类的成员包括数据成员和成员函数,分别描述类所表达问题的属性和行为,是问题特性的不可分割的两个方面。成员数据的定义方式与一般的变量相同,只要将这个定义放在类的定义体中即可,它与一般变量的区别就在于其访问的权限可以由类来方便地控制。类成员访问权限的控制,就是类的隐藏和封装,这种控制是通过设置成员的访问控制属性来实现的。访问控制属性可以有以下三种:公有类型(public)、私有类型(private)和
14、保护类型(protected)。,15,8.1类和对象对象成员的引用,在程序中经常需要访问对象中的成员。访问对象中的成员可以有三种方法:通过对象名和成员运算符访问对象中的成员。通过指向对象的指针访问对象中的成员。通过对象的引用变量访问对象中的成员。,1、通过对象名和成员运算符访问对象中的成员class Time public:/数据成员和函数成员是公有的int hour;void display()cout hour:hour endl;void main()Time p;/定义对象p p.hour=8;/使p对象的成员值为8 p.display();,16,2通过指向对象的指针访问对象中的成
15、员class Time public:/数据成员和函数成员是公有的int hour;void display()cout hour;/输出p指向的对象中的成员t.display()、(*p).display()、p-display()三者等价,17,3、通过对象的引用变量访问对象中的成员 class Time public:/数据成员和函数成员是公有的int hour;void display()cout hour:hour endl;Time t;/定义对象tTime/输出对象t的成员hour,18,4、对象赋值对象名1对象名2;Clock*pa,*pb,aClock,bClock;bClo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 对象

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