




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
类和对象第二章目录类的本质类的声明成员函数的定义类与对象一个例子总结与进一步说明
1.类的本质在C++中,一个类就是一个数据类型与普通数据类型的区别整型、实型、字符型是内建数据类型, 而类则是用户自定义数据类型内建数据类型(int,char…)可以直接使用, 而类则需要遵循先创建,后使用的2部曲。
如inti;类的这一特点和C中的一种构造数据类型——结构体(struct)非常象目录类的本质类的声明成员函数的定义类与对象一个例子总结与进一步说明
回顾:声明一个结构体类型的方法:structStudent//声明了一个名为Student的结构体类型{
intnum;charname[20];charsex;};Studentstud1,stud2;//定义了两个结构体变量stud1和stud2stud1.num=10;//访问结构体变量的成员stud1.sex=‘m’2.类的声明2.类的声明
类的声明Studentmary;Studentmary,mike;Studentletvians[3600];类关键字class类名{成员定义};常用大写字母开头类名对象名;类的使用-对象的定义classStudent{
intnum;charname[20];charsex;};classStudent//以class开头{
intnum;charname[20];charsex;//以上3行是数据成员voiddisplay()//这是成员函数{cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;//以上3行是函数中的操作语句}};Studentstud1,stud2;//定义了两个Student类的对象stud1和stud2stud1.display();//调用可以看到:声明类的方法是由声明结构体类型的方法发展而来的2.类的声明
classPerson{public:voidsetAge(unsignedn);unsignedgetAge()const{returnage;}private:unsignedage;};问题:从右边的例子来看,类和结构体成员声明有哪些不同??类中,不仅有数据类型成员,还有函数类型成员类中的成员有public或private之分数据成员成员函数访问控制访问控制2.类的声明—访问权限2.类的声明—访问权限对外访问权限的设定public:对外开放访问权限的成员private:对外关闭访问权限的成员protected:对外关闭访问权限,但对派生类开放访问权限的成员
公共接口信息隐藏原则实现:通过私有相关成员来实现目的:可以严格控制对相关数据的访问“你们要进窄门。因为引到灭亡,那门是宽的,路是大的,进去的人也多;引到永生,那门是窄的,路是小的,找着的人也少。”
——《圣经》如果在类的定义中既不指定private,也不指定public,则系统就默认为是私有的。类类型的声明一般形式如下:class类名{private:私有的数据和成员函数;protected:保护的成员;
public:公用的数据和成员函数;};2.类的声明—访问权限classCircle//声明类类型{private://声明以下部分为私有的
doubleradius;public://声明以下部分为公用的
voidSet_Radius(doubler){radius=r;} doubleGet_Radius(){returnradius;} doubleGet_Girth(){return2*3.14*radius;} doubleGet_Area(){return3.14*radius*radius;}};CircleA; //创建Circle类型的对象AA.radius//错误!访问私有成员A.Get_Radius()//正确!2.类的声明—访问权限C++允许用struct来定义一个类型。如可以将前面用关键字class声明的类类型改为用关键字struct:structStudent//用关键字struct来声明一个类类型{private://声明以下部分为私有的intnum;//以下3行为数据成员charname[20];charsex;public://声明以下部分为公用的
voiddisplay()//成员函数{cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}};Studentstud1,stud2;//定义了两个Student类的对象2.类的声明—访问权限(类和结构体的区别)
class
,struct,union
都可以定义一个类:
class
缺省说明时,其成员被认为 是私有的
struct
若不特别指出,其所有成员 都是公有的
union
其所有成员都是公有的,且 不能更改
类中为什么有2种成员(数据成员和成员函数)呢?语义-类就是现实世界中的一类对象的软件抽象数据成员——现实世界对象的属性成员函数——现实世界对象的动作(行为)语法数据类型本质是:对应到数学上的“集合”吗?unsignedinti;int*p;整型变量i可以进行+-X/%等操作指针变量p可以进行+-操作,X/%等操作没有意义。另外,可以进行*操作2.类的声明—类的成员
类中为什么有2种成员(数据成员和成员函数)呢?语义-类就是现实世界中的一类对象的软件抽象数据成员——现实世界对象的属性成员函数——现实世界对象的动作(行为)语法数据类型本质是:对应到数学上的“集合”吗?数据类型本质是:数学上的“集合”以及定义在该集合上的操作——
代数系统!!!举例:cin.get();//get是istream类提供的一个成员函数strings=“abcd”;s.length(); //length是string提供的一个成员函数2.类的声明—类的成员
成员操作成员选择符:.指针操作符:->classPerson{public: voidsetAge(unsignedn); unsignedgetAge()const;private: unsignedage;};Personboxer,*pboxer;pboxer=&boxer;boxer.setAge(27);pboxer->setAge(28);2.类的声明—成员的访问方法目录类的本质类的声明成员函数的定义类与对象一个例子总结与进一步说明
3.成员函数的定义
classCircle//声明类类型{private://声明以下部分为私有的
doubleradius;public://声明以下部分为公用的
voidSet_Radius(doubler);doubleGet_Radius(){returnradius;}doubleGet_Girth(){return2*3.14*radius;}doubleGet_Area(){return3.14*radius*radius;}};voidCircle::Set_Radius(doubler){ radius=r;};在类声明内定义函数在类声明外定义函数3.成员函数的定义成员函数两种定义方法在类声明之内进行定义在类声明之外进行定义
类名::函数名()在声明内定义的是内联函数用代码替换调用,加快执行速度
classCircle//声明类类型{private://声明以下部分为私有的
doubleradius;public://声明以下部分为公用的
voidSet_Radius(doubler);doubleGet_Radius(){returnradius;}doubleGet_Girth(){return2*3.14*radius;}doubleGet_Area(){return3.14*radius*radius;}};voidCircle::Set_Radius(doubler){ radius=r;};::作用域解析操作符目录类的本质类的声明成员函数的定义类与对象一个例子总结与进一步说明
类和对象的关系——类是对象的抽象(类型、模板……)对象是类的实例(instance),是类的具体表现形式。
4.类与对象用类来定义对象,定义对象的几种方法:1.先声明类类型,然后再定义对象2.在声明类类型的同时定义对象3.不出现类名,直接定义对象4.类与对象1.先声明类类型,然后再定义对象前面用的就是这种方法,如Studentstud1,stud2;//Student是已经声明的类类型(1)class类名对象名如classStudentstud1,stud2;把class和Student合起来作为一个类名,用来定义对象。(2)类名对象名如Studentstud1,stud2;直接用类名定义对象。这两种方法是等效的。第1种方法是从C语言继承下来的,第2种方法是C++的特色,显然第2种方法更为简捷方便。4.类与对象2.在声明类类型的同时定义对象classStudent//声明类类型{public://先声明公用部分
voiddisplay(){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}private://后声明私有部分intnum;charname[20];charsex;}stud1,stud2;//定义了两个Student类的对象在定义Student类的同时,定义两个Student类的对象。4.类与对象3.不出现类名,直接定义对象class//无类名{private://声明以下部分为私有的┆
public://声明以下部分为公用的┆}stud1,stud2;//定义了两个无类名的类对象直接定义对象,在C++中是合法的、允许的,但却很少用。匿名类,在某些开发框架下(如android)比较常用。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。4.类与对象目录类的本质类的声明成员函数的定义类与对象一个例子总结与进一步说明
时间如何调整如何与对象通信?6.1类与对象内部构造class钟
{private:
钟的构造;
public:
读取时间值;
调整时间值;};对象通过类接口与外部通信如何与对象通信?6.1类与对象定义类和对象举例//例
一个类的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}关键字定义一个类标识符类名Tdate类型的一个对象(实例)定义类和对象举例数据成员//例
一个类的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}定义类和对象举例类中定义成员函数内联函数处理//例
一个类的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}定义类和对象举例//例
一个类的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}voidSet(intm,intd,inty);intIsLeapYear();voidPrint();在类外定义成员函数voidTdate::Set(intm,intd,inty){month=m;day=d;year=y;}intTdate::IsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidTdate::Print(){cout<<year<<"."<<month<<"."<<day<<endl;}定义类和对象举例//例
一个类的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}类说明的一般形式为:
class
类名{public:
公有段数据成员和成员函数
;
protected:
保护段数据成员和成员函数
;
private:
私有数据成员和成员函数
;};定义类和对象注:1.允许已定义类名出现在类的说明中例:
classlink
{link
*next; ……};//声明一个指向link类类型的指针定义类和对象注:1.允许已定义类名出现在类的说明中例:
classX
{……};
classY
{X
dataMember; ……};//声明一个类类型数据成员定义类和对象注:1.允许已定义类名出现在类的说明中例:
classX
{
X
dataMember; ……};//错误错误无穷递归结构定义类和对象注:1.允许已定义类名出现在类的说明中2.类可以无名,用于直接声明对象例:
class{……}mydate; //直接声明一个对象定义类和对象注:1.允许已定义类名出现在类的说明中2.类可以无名,用于直接声明对象//例#include<iostream>usingnamespacestd;classempty{};intmain(){emptye1;cout<<"&e1="<<&e1<<endl;
cout<<"sizeofe1="<<sizeof(e1)<<endl;}3.类是一个程序包。可以只有数据成员或只有成员函数,或者为空。一个空类定义类和对象注:1.允许已定义类名出现在类的说明中2.类可以无名,用于直接声明对象3.类是一个程序包。可以只有数据成员或只有成员函数,或者为空。//例#include<iostream>usingnamespacestd;classempty{};intmain(){emptye1;cout<<"&e1="<<&e1<<endl;
cout<<"sizeofe1="<<sizeof(e1)<<endl;}一个空类对象定义类和对象注:1.允许已定义类名出现在类的说明中2.类可以无名,用于直接声明对象//例#include<iostream>usingnamespace
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 11 蟋蟀的住宅(教学设计)-2024-2025学年统编版语文四年级上册
- 2014审定新人教版小学四年级上册数学全册教案教学设计
- 1 假期有收获 教学设计-2023-2024学年道德与法治二年级上册统编版
- 25少年闰土(教学设计)-2024-2025学年语文六年级上册统编版
- 3 古诗词三首 《宿建德江》(教学设计)2024-2025学年统编版语文六年级上册
- 6 体验造纸 教学设计-2024-2025学年科学二年级上册冀人版
- 2023一年级语文上册 我上学了 我是中国人配套教学实录 新人教版
- Bridging Unit 3 Section A 1a~2d听说课教学设计 2024-2025学年鲁教版五四制(2024)英语六年级上册
- 13《我想和你们一起玩》第二课时 教学设计-2023-2024学年道德与法治一年级下册统编版
- 10 在牛肚子里旅行(教学设计)-2024-2025学年统编版语文三年级上册
- 精品市政道路施工测量方法及测量方案
- 室内采暖管道安装施工工艺标准规范标准
- 小型手推清扫车毕业设计说明书课件
- 监理大纲(范本)
- 受拉钢筋抗震锚固长度Lae
- 2018年湖北省襄阳市中考物理试卷
- 《沉淀滴定法》PPT课件.ppt
- 波程差与光程差
- 常用测井曲线符号及单位(最规范版)
- 美国驾驶手册(中文版)
- 人工岛施工方案(附示意图)
评论
0/150
提交评论