版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第9章章 类和对象类和对象9.19.1类和对象的根本概念类和对象的根本概念 数据与函数原型封装在一同称作类,数据与函数原型封装在一同称作类,方法是在构造类型中添加了函数原型,被方法是在构造类型中添加了函数原型,被类阐明的变量称为对象。对象中又包含着类阐明的变量称为对象。对象中又包含着方法和属性。方法和属性。9.2 9.2 类类 包含数据又包含函数方法的数据包含数据又包含函数方法的数据类型称为类。类型称为类。9.2.1 9.2.1 对类的阐明对类的阐明格式格式: class : class private : private : public : public : protected : pr
2、otected : 阐明: class 是阐明类的关键字。 类的成员包括数据和函数。 用private 阐明的是私有成员,只能在类的定义中运用,假设位置在先,private 可省。4. 类成员的默许访问属性为私有。5. 用public 阐明的成员为公有成员,可以被类以外的函数调用。6. 被维护的成员只能被派生类调用。7. 类的私有成员不能初始化。例:阐明一个“人类 class person private : char name8; unsigned age : 7; unsigned sex : 1; public : void Register(char *, int, char); vo
3、id Getname(char *); int Getage() ; char Getsex(); ;阐明: 类中人的根本属性:姓名,年龄,性别。 对属性操作的方法经过类中定义的函数,登录:输入姓名,性别,年龄。 此处的private可省。 不同权限的成员的书写顺序是恣意的。 在定义类时,可以只给出函数原型,但在类内和类外必需给出这些函数的定义。 假设在定义类的类外定义类中的函数成员时,应按一定的格式: type : ( ) 例:对类中的函数进展定义 #include iostream.h#include class person private: char Name8; unsigned A
4、ge : 7; unsigned Sex : 1; public : void Register(const char*,int,char); void Getname(char*); int Getage(); char Getsex(); ;/以上对类的定义可以作为头文件:#include “e10-1.h 替代。 void person:Register(const char *name, int age, char sex) strcpy(Name,name); Age=age; Sex=(sex=m? 0 : 1 ); void person:Getname(char *name)
5、strcpy(name, Name); /大写为私有成员,小写为外部成员 int person:Getage() /只需经过函数方法才干得到私有成员的值 return Age; char person :Getsex() return (Sex=0 ? m:f); 内部成员承当中转义务:接纳外部数据,将内部数据输出封装和维护。一定要清楚类成员和函数参数之间的关系。9.2.2 类与构造的比较 一样地方和不一样地方9.2.3 内联成员函数内联成员函数 内联成员函数的定义及优点内联成员函数的定义及优点(用空间换时间用空间换时间) 在类阐明中定义成员函数的函数体,或者在类阐明中定义成员函数的函数体,或
6、者类外定义函数时用类外定义函数时用inline阐明。阐明。例:运用例:运用inline方法方法 #include “ex91.h inline void person :Register(const char *name, int age, char sex) strcopy(Name,name); Age=age; Sex=(sex=m ? 0 : 1 ); inline void person :Getname(char *name); strcpy(name, Name); inline void person :Getage() return Age ; inline char per
7、son :Getsex() return (Sex=0 ? m :f);例:运用在定义类时定义函数体方法class person private : char Name8; unsigned Age : 7; unsigned Sex : 1; public : void Register(char *, int , char); void Getname(char *name) strcopy(name, Name); int Getage() return( Age); char Getsex() return (sex=0 ? m: f) ; ;inline void person :R
8、egister(const char *name, int age, char sex) strcopy(Name,name); Age=age; Sex=(sex=m ? 0 : 1 ); 9.3 对象对象对象是类的实体。对象是类的实体。对象是类类型的变量。对象是类类型的变量。9.3.1 对象的阐明对象的阐明格式:格式: 例:例:person pre1,pre2;阐明:阐明: 类阐明时不占用内存,但阐明了对象,对象要类阐明时不占用内存,但阐明了对象,对象要占内存。占内存。 对象的成员在内存中按向量陈列。对象的成员在内存中按向量陈列。 9.3.2 对象的运用 象运用构造变量一样。 对象.成员
9、对象.方法函数 VB中,在窗体中输出是:form.print 例: i= per1.Getage( ); per2.print 阐明:1. 类外只能访问公有成员。 如:per1.Age 是错误的。2. 对象可以整体赋值pre2=per1。3. 可以在阐明类时阐明对象。4. 对象可以作为函数的实参。例:运用类、对象的实例输入三个人的信息且输出程序: #include iostream.h#include string.hclass person private : char Name8; unsigned Age : 7; unsigned Sex : 1; public : void Regi
10、ster(const char *,int,char); void Getname(char *name) strcpy(name, Name); int Getage() return Age; char Getsex() return (Sex=0 ? m: f); ;inline void person:Register(const char *name, int age, char sex) strcpy(Name,name); Age=age; Sex=(sex=m ? 0 : 1 ); void main() void out_dat(person); /person 是类名,对象
11、将作为参数。如函数阐明:int sum(int,int); char str20, c; int ag; person per1,per2,per3; coutstragc; per1.Register(str,ag,c); per2.Register(zhang, 22, f); per3.Register(zhou,23,m); coutper1:t; out_dat(per1); coutper2:t; out_dat(per2); coutper3:t; out_dat(per3); per2=per1; coutn per2:t; out_dat(per2);void out_dat
12、(person p)char str20;p.Getname(str);coutstrtp.Getage()tp.Getsex()no=no; /与person:no=no;等价 strcpy(this-name,name); int Getno() return no;void Getname(char *name) strcpy(name,this-name);void out_dat(person p)char str20; int n; n=p.Getno(); p.Getname(str); coutntstrendl;void main() void out_dat(person)
13、; /person 是类名,对象将作为参数。如函数阐明:int sum(int,int); char name8; int no; person per1,per2,per3; coutnoname; per1.setno(no,name); per2.setno(12345,zhang); per3.setno(16789,zhou); coutper1:t; out_dat(per1); coutper2:t; out_dat(per2); coutper3:t; out_dat(per3); per2=per1; coutn per2:t; out_dat(per2);9.5 常成员9.
14、5.1 概念共享而又需求防止改动的数据应定义为常量进展维护。9.5.2 常对象 类名 const 对象名或 const 类名 对象名 9.5.3 常成员函数 函数名( ) const9.5.3 常数据成员 const 成员名阐明: 常对象在定义时必需初始化,且不能更新。 常成员函数只能调用它的常成员函数。 常数据只能经过构造函数成员初始化。9.6 成员函数的重载 一个函数名,有多种作用。如何呼应一个音讯完成相应的功能那么由对象根据音讯的性质决议。例:建立一个线性表,并完成结点元素的输出(p181)。class Linear_List int *List; /线性表头指针 unsigned nM
15、ax; /允许结点个数 unsigned nElem; /实践结点个数public: void Init(int n=10) /给线性表分配动态节点 List=new int(n); /数组指针 nMax=n; /成员初始化 nElem=0; int Elem(int); /成员函数重载 int &Elem(unsigned n) return Listn; unsigned Elem()return nElem; unsigned Max() return nMax; void Print(); /输出 void Destroy() delete List; /收回内存 ; /以上&
16、amp;Elem表示值为援用的函数 ,前往一个变量。#include iostream.hint Linear_List:Elem(int elem) /建立线性表 if(nElemnMax) ListnElem+=elem; return nElem; return 0; void Linear_List:Print() /输出线性表中元素值for(int i=0;i(int)nElem;i+) coutListiendl;void main() Linear_List list,list1; /定义两个对象 list.Init(20); /调用构造函数赋值 list1.Init(); /调
17、用构造函数赋值 for(int i=1;i=5;i+) list.Elem(i); /只给对象list赋值coutnThe length of list1 is list1.Max() and there are list1.Elem ()elements in it.n;coutThe length of list is list.Max()and there are list.Elem () elements in it.n; list.Print(); list.Elem(3u)=100; /调用重载函数给第4个元素赋值(援用 list.Elem(20); /调用重载函数给第6个元素赋值 coutn Now,there are list.Elem()elements in list.n; list.Print(); /输出节点元素
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农贸市场营销方案(5篇)
- 异构系统状态估计-洞察分析
- 药物毒理学研究-洞察分析
- 云计算环境下的资产策略-洞察分析
- 单招面试自我介绍(14篇)
- 网络音乐平台品牌建设-洞察分析
- 企业中如何实施高效且富有创意的安全教育方案
- 《登快阁黄庭坚》课件
- 顾问劳动合同三篇
- 亲子共读增进沟通的良方
- 2023-2024学年山东省威海市小学数学三年级下册期末评估试卷
- 卫生部手术分级目录(2023年1月份修订)
- GB/T 1096-2003普通型平键
- 新版2023设计收费标准
- 房屋维修标书
- 【精编版】新概念英语第三册知识点笔记 讲义
- 建筑施工作业人员体检表格
- 《国际贸易理论、政策与实务》ppt课件完整版
- 石方静态爆破方案
- 彩色简约鱼骨图PPT图表模板
- 道路旅客运输企业实现安全生产方针与目标的保障措施
评论
0/150
提交评论