




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、参考:参考:C+C+程序设计教程程序设计教程 p56p64p56p64第五讲第五讲 类和对象(一)类和对象(一)C+C+类与对象概述类与对象概述类类q类的声明类的声明q类的定义类的定义对象对象q对象的声明与成员访问对象的声明与成员访问q实例化对象实例化对象类和对象的简单应用举例类和对象的简单应用举例C+C+对象对象:现实世界中某个具体的:现实世界中某个具体的物理实体物理实体在计算在计算机逻辑中的映射和体现。机逻辑中的映射和体现。现实中的现实中的对象对象都具有属性和行为。都具有属性和行为。C+C+类类:是一种抽象的数据类型,是同种对象的:是一种抽象的数据类型,是同种对象的集合与抽象,是具有共同行
2、为和属性的若干集合与抽象,是具有共同行为和属性的若干对象的统一描述体对象的统一描述体C+C+类与对象概述类与对象概述类类q类的声明类的声明q类的定义类的定义对象对象q对象的声明与成员访问对象的声明与成员访问q实例化对象实例化对象类和对象的简单应用举例类和对象的简单应用举例C+C+ 狗类狗类行为行为 吠叫吠叫属性属性 名字名字 品种品种 年龄年龄 颜色颜色class Dogpublic: void yelp();private: string name; string breed; int age; string color;映射映射抽象抽象C+C+class Dog /类名类名public:
3、void yelp();/成员函数成员函数private: string name; string breed; int age; string color;数据成员数据成员a_1C+C+类的声明类的声明class public: protected: private: ;/分号!C+C+class TDatepublic: void setDate( const int aYear, const int aMonth, const int aDay ); bool isLeapYear() const; void display() const;private: int m_iYear; i
4、nt m_iMonth; int m_iDay;a_2C+C+类名,类名,class是声名类的关键字,是声名类的关键字,是标示符,是标示符,通常以通常以T或者或者C开头,以示与对象,函数,变量区别开头,以示与对象,函数,变量区别类的成员,包含类的成员,包含数据成员数据成员和和成员函数成员函数两部分两部分访问权限修饰符访问权限修饰符,包括公有的,包括公有的(public),私有的,私有的(private)和保护的和保护的(protected)三类。三类。u公有的成员用public来说明,一般为一些成员函数,它是提供给用户的接口功能。u私有的成员用private来说明,私有部分一般为类的成员变量,
5、用来描述对象的属性C+C+访问权限修饰符类体内类体外privateprotectedpublicC+C+类与对象概述类与对象概述类类q类的声明类的声明q类的定义类的定义对象对象q对象的声明与成员访问对象的声明与成员访问q实例化对象实例化对象类和对象的简单应用举例类和对象的简单应用举例C+C+类的定义类的定义类体内定义类体内定义类体外定义类体外定义类的定义即给出成员函数具体的功能实现类的定义即给出成员函数具体的功能实现C+C+class TPointpublic: void setX( int aX ) m_iX = aX; void setY( int aY ) m_iY = aY; void
6、 move( int aX, int aY ) m_iX += aX; m_iY += aY; void display() const coutX:m_iXendl; coutY:m_iYendl; private: int m_iX; int m_iY;类体内定义:类体内定义:5_1C+C+类体外定义:类体外定义: :() expression;void Dog:yelp() coutWo Wo!endl;C+C+class TDatepublic: void setDate( const int aYear, const int aMonth, const int aDay ); boo
7、l isLeapYear() const; void display() const;private: int m_iYear; int m_iMonth; int m_iDay;a_2C+C+void TDate:setDate( const int aYear, const int aMonth, const int aDay ) m_iYear = aYear; m_iMonth = aMonth; m_iDay = aDay;bool TDate:isLeapYear() const return(!(m_iYear%4)&(m_iYear%100)|!(m_iYear%400
8、);void TDate:display() const coutm_iYear.m_iMonth.m_iDayendl;a_2C+C+注意 成员函数类体外定义时,必须在函数名前面加“类名:” 若无“类名:”则该函数不是成员函数而是全局函数。 类体外定义成员函数时,类体内必须声明该成员函数! 不允许在类的声明部分对成员变量进行初始化。 将类的声明与定义分开,类的声明放到头文件,定义放到源文件中C+C+类与对象概述类与对象概述类类q类的声明类的声明q类的定义类的定义对象对象q对象的声明与成员访问对象的声明与成员访问q实例化对象实例化对象类和对象的简单应用举例类和对象的简单应用举例C+C+ 狗类狗
9、类行为行为 吠叫吠叫属性属性 名字名字 品种品种 年龄年龄 颜色颜色 莱丝莱丝行为行为 莱丝莱丝. .吠叫吠叫属性属性 莱丝莱丝. .名字名字: :莱丝莱丝 莱丝莱丝. .品种品种: :黑贝黑贝 莱丝莱丝. .年龄年龄: :三岁三岁 莱丝莱丝. .颜色颜色: :黑色黑色声明莱丝是一只狗声明莱丝是一只狗C+C+ ;对象名表一个对象对象数组指向对象的指针多个对象TDate date; Dog dog; TDate today, tomorrow;TDate *pDate;TDate array10;对象引用Dog dg; Dog &ref = dg; C+C+.;.();TDate tod
10、ay;today.setDate( 1998, 10, 19 );bool isLeap = today.isLeapYear(); TPoint point;point.setX( 100 );point.setY( 100 );point.move( 50, 50 );point.display();C+C+-;-();TDate *pDate = new TDate;pDate-setDate( 1998, 10, 19 );bool isLeap = pDate-isLeapYear();delete pDate; TPoint *pPoint = new TPoint;pPoint-
11、setX( 100 );pPoint-setY( 100 );pPoint-move( 50, 50 );pPoint-display();delete pPoint; C+C+(*).;(*).();(&)-();(&)-;对象和指向对象的指针同样可以进行取地址和取值操作C+C+TDate *pDate = new TDate;(*pDate).setDate( 1998, 10, 19 );bool isLeap = (*pDate).isLeapYear();delete pDate; TPoint point;(&point)-setX( 100 );(&
12、;point)-setY( 100 );(&point)-move( 50, 50 );(&point)-display();C+C+类与对象概述类与对象概述类类q类的声明类的声明q类的定义类的定义对象对象q对象的声明与成员访问对象的声明与成员访问q实例化对象实例化对象类和对象的简单应用举例类和对象的简单应用举例C+C+类的实例化类的实例化栈区栈区堆区堆区静态存储区静态存储区( (全局区)全局区)C+C+法一:先声明类类型,再定义对象 推 荐class Studentpublic: void display() const . . private: int m_iNum; st
13、ring m_strName; char m_cSex;Student stud1; /class Student stud1;C+C+法二: 在声明类的同时定义对象class Studentpublic: void display() const coutnum: m_iNum endl; coutname: m_strName endl; coutsex: m_cSex endl; private: int m_iNum; string m_strName; char m_cSex;stud1,stud2;C+C+法三: 不出现类名,直接定义对象class /省略类名public: voi
14、d display() const coutnum: m_iNum endl; coutname: m_strName endl; coutsex: m_cSex endl; private: int m_iNum; string m_strName; char m_cSex;stud1,stud2;C+C+注意 通常采用先定义类,后定义对象的方法,其他方法不使用 对象占据内存单元而类类型不占据内存单元 以上方法创建的对象均在栈区C+C+1.概念:用new创建的无名对象,存储在堆区2.建立堆对象new 类名new 类名无符号整型表达式 可为无符号整型变量C+C+const int KArrSi
15、ze = 100; TDate *pdate = new TDate;TDate *arry = new TDateKArrSize;Dog *dog = new Dog;Dog *dogArr = new DogKArrSize;C+C+3.释放堆对象delete 指针名delete 指针名例1:A *ptr = NULL;ptr = new A;delete ptr;例2:A *ptr = NULL;ptr = new A5;delete ptr;C+C+注意 delete只能回收由new返回的指针指向的内存空间,包括空指针。 一个指针只能delete一次。 删除对象数组时无论几维arra
16、y,delete前都只有一个。 确认不用的空间一定要delete。C+C+全局区中的对象和内置类型static变量存储类别规则是相同class Studentpublic: void setName( const string aName ) m_strName = aName void display() const coutm_strNameendl; private: string m_strName;b1C+C+static Student s_stu2;int main() Stdudent stu; stu.setName(Jim ); stu.display(); static
17、Student s_stu1; s_stu1.setName(Lily ); s_stu1.display(); s_stu2.setName(Morrison); s_stu2.display(); return 0;C+C+思考:对象的存储方式?C+C+对象1对象2对象10. 成员函数data1data2data10对象的存储方式:C+C+#include using namespace std;class Timepublic: void set();private: int m_iHour; int m_iMinute; int m_iSec;void Time:set() cin m
18、_iHour m_iMinute m_iSec; int main() cout sizeof(Time) endl; return 0;5_2C+C+注意 无论成员函数在类内还是在类外定义,成员函数都不占用对象的存储区 说成员函数是对象的只是从逻辑角度上说的,而非物理角度而言 对象的存储类别和内置类型变量相同C+C+思考:对象中成员的引用方法?C+C+回忆结构体的访问#include #include using namespace std;struct Student string num; char sex; string name;Student stu;int main() stu.
19、num = 007; = haha; stu.sex = M; cout stu.num stu.sex endl; return 0;C+C+通过对象名和 “ . ”访问通过对象指针访问通过对象引用访问成员的访问方式C+C+法一:通过对象名访问: 对象名 . . 成员名public: void display() coutX: m_iXendl; coutY: m_iY 成员名(*对象指针). 成员名class TPointpublic: void display() coutX: m_iXendl; coutY: m_iYdisplay(); return 0;5_4C+C+法二:通过对象引用访问注意 对象引用与普通变量引用的定义方法相同class TPointpublic: void display() coutX: m_iXendl; coutY: m_iYendl; void set( int aX, int aY) m_iX = aX; m_iY = aY; private: int m_iX; int m_iY;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 试题及答案一智能家居设计
- 磷酸系列产品生产线项目可行性研究报告
- 阅读能力成长的关键影响因素分析
- 《电路基础知识讲解与实操演练:初二物理教案》
- 能源与环境科学综合题解答及解析
- 推广现代技术手段提升疾病早期监测能力
- 产品研发费用表格:各行业研发投入统计
- 社区农业资源调配协议
- 行业发展趋势与行业洞察报告表
- 乡村中医药服务现状与发展瓶颈分析
- 期末试卷(试题)(含答案)-2024-2025学年一年级下册数学北师大版
- 上海浦东新区公办学校储备教师教辅招聘笔试真题2022
- 国开(甘肃)2024年春《地域文化(专)》形考任务1-4终考答案
- GB/T 9800-1988电镀锌和电镀镉层的铬酸盐转化膜
- GB/T 7193-2008不饱和聚酯树脂试验方法
- 陕西省府谷县国能矿业有限公司环保竣工验收检测报告公示
- 第5章 自动驾驶仪系统《民航飞机自动飞行控制系统》
- DB4401-T 19-2019涉河建设项目河道管理技术规范-(高清现行)
- 儿科常用药、用药特点及护理ppt
- 胎心监护以及判读
- 企业资产损失所得税税前扣除鉴证业务操作的指南
评论
0/150
提交评论