类与对象及封装性_第1页
类与对象及封装性_第2页
类与对象及封装性_第3页
类与对象及封装性_第4页
类与对象及封装性_第5页
已阅读5页,还剩16页未读, 继续免费阅读

下载本文档

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

文档简介

当猪类统治了世界类与对象及封装性1.类的抽象2.类的定义与对象生成3.构造函数和析构函数1.类的抽象在现实世界中,任何一个实体都可以看成是一个对象。

一个对象具有如下二个方面的要素:对象的属性:是实体自身所具有的性质。如一个具体的人,他有身高、体重等特征。对象的方法:是实体自身所拥有的操作。如一个具体的人,他可以走、说话等动作。类:按照上述二个方面去进行归纳与抽象定义后所产生的类型类是具体对象的一个抽象的定义张三、李四、王五是一个个具体的人“人”就是类的概念张三、李四、王五就是“人”类的对象

对象是按照类的抽象定义的框架产生的,也就是说,类是这一类的对象的生成模型。面向对象的程序设计:

通过对象的使用去完成应用程序的2.类的定义与对象生成成员数据:类的属性数据;成员函数:对类的属性数据进行操作的方法定义一个类时,首先,要定义它的属性数据,其次,要定义对这些属性数据进行操作的方法。类定义的一般格式如下:Class

<类名>{public:<公有成员函数和数据成员的声明>private:<私有成员函数或者数据成员的声明>protected:<保护成员函数或者数据成员的声明>};<各个成员函数的实现代码>2.类的定义与对象生成classQueue{

intQueueMem[100];

//用来存放整型数据

intRloc,Sloc;//分别用来指示队列的头与尾

public:

voidInit();

//用来初始化队列

voidPut(inti);

//入队

intGet();

//出队};其中变量QueueMem,Sloc,Rloc是私有变量,之所以称为私有,意味着它们只能由Queue类的成员函数来访问,而不能由程序的其他任何部分来访问。private,public,protected访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,4.该类的对象访问。2.类的定义与对象生成实现一个类的成员函数,必须通过用类名限定函数名来告知编译器这个函数属于哪个类。例如:voidQueue::Put(inti){

if(Sloc==100)

{

cout<<”Queueisfull”;

return;

}Sloc++;QueueMem[Sloc]=i;}

“::”是作用域运算符。它告知编译器函数Put()属于Queue类的,也即它是Queue类的一个成员函数。下面是Queue类的完整定义。classQueue{

intQueueMem100];intRloc,Sloc;public:voidInit();voidPut(inti);intGet();};//类Queue的初始化voidQueue::Init(){Rloc=Sloc=0;}//把一个整数放入Queue中voidQueue::Put(inti){if(Sloc==100){cout<<"Queueisfull";return;}Sloc++;QueueMem[Sloc]=i;};//从Queue中取出一个整数intQueue::Get(){if(Rloc==Sloc){cout<<"Queueisnull";return0;}Rloc++;returnQueueMem[Rloc];}一旦生成了一个类,类名就成了一种新的数据类型标识符,就可以用这个类名来生成对象了。例如:

Queue

Q1,Q2;它生成了Queue类的两个对象:Q1和Q2。类相当于是用户创建的一种新的数据类型,而对象只是由类定义的这种数据类型的变量而已。一个类的对象生成后,就拥有了属于自己的数据副本,如Q1和Q2各自拥有属于自己的独立的QueueMem,Sloc,Rloc数据。#include<iostream>usingnamespacestd;//插入上面的Queue类的代码intmain(){QueueQ1,Q2;//产生两个类Queue的对象

Q1.Init();//Q1初始化Q2.Init();//Q2初始化Q1.Put(10);//把一些整数分别放入队列Q1、Q2中Q1.Put(11);Q2.Put(19);Q2.Put(20);//从队列Q1、Q2中分别取出这些整数cout<<"ContentsofqueueQ1:";cout<<Q1.Get()<<"";cout<<Q1.Get()<<"\n";cout<<"ContentsofqueueQ2:";cout<<Q2.Get()<<"";cout<<Q2.Get()<<"\n";return0;}成员函数只能相对于某一个具体的对象来调用。例如:

Q2.Init();在一个类中,它的一个成员函数调用它的另一个成员函数时,可以直接地进行,而不必使用点运算符。一个例子classMyclass{inta;public:intb;voidSet_ab(inti);intGet_a();voidReset();};intMyclass::Get_a(){returna;}voidMyclass::Reset(){Set_ab(0);}voidMyclass::Set_ab(inti){a=i;b=i*i;}2.类的定义与对象生成类的成员在类的外面被引用时,就必须用对象来限定,并且它们要被声明为public。成员函数可直接引用类的其它成员,而不管是否是public还是protectedprivate。类的封装性(也叫信息隐藏):是把一个对象的实现细节从它所提供的服务中进行隐藏,把对象的外部特征与内部细节分开。也就是说,外部特征是外部代码或其它对象可以访问的,而内部细节对外部代码或其它对象来说是隐藏的,它隐藏了一个对象是如何工作的。3.构造函数和析构函数构造函数:

是在对象生成时用来自动初始化对象

是类的一个成员函数,并与类有同样的名字构造函数是一个在对象被生成的时候被调用的函数构造函数不返回值。析构函数

是在对象被删除时需要它来进行一些操作例如,对象需要把动态分配给它的内存释放析构函数同构造函数同名,但前面加一个~,析构函数是在对象被删除时自动被调用的函数析构函数没有返回类型,无参数。3一个例子演示构造函数和析构函数的工作过程。#include<iostream>usingnamespacestd;classQueue{

int*QueueMem;intSloc,Rloc,Maxsize;public:Queue();//构造函数constructor~Queue();//析构函数destructorvoidPut(inti);intGet();};Queue::Queue(intsize){Sloc=Rloc=0;

Maxsize=size;if(!(QueueMem=newint[Maxsize]))exit(0);

温馨提示

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

评论

0/150

提交评论