版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,参考:C+程序设计教程 p56p64,第五讲 类和对象(一),.,本次议题,类与对象概述 类 类的声明 类的定义 对象 对象的声明与成员访问 实例化对象 类和对象的简单应用举例,.,类与对象概述,对象:现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。,现实中的对象都具有属性和行为。,.,类与对象概述(cont.),类:是一种抽象的数据类型,是同种对象的集合与抽象,是具有共同行为和属性的若干对象的统一描述体,.,本次议题,类与对象概述 类 类的声明 类的定义 对象 对象的声明与成员访问 实例化对象 类和对象的简单应用举例,.,狗类 行为 吠叫 属性 名字 品种 年龄 颜色,class
2、 Dog public: void yelp(); private: string name; string breed; int age; string color; ;,映射,抽象,.,类的声明,class Dog /类名 public: void yelp();/成员函数 private: string name; string breed; int age; string color; ;,数据成员,a_1,.,类的声明(cont.),类的声明,class public: protected: private: ;/分号!,.,类的声明(cont.),class TDate publi
3、c: void setDate( const int aYear, const int aMonth, const int aDay ); bool isLeapYear() const; void display() const; private: int m_iYear; int m_iMonth; int m_iDay; ;,a_2,.,类的声明(cont.),类名,class是声名类的关键字,是标示符,通常以T或者C开头,以示与对象,函数,变量区别 类的成员,包含数据成员和成员函数两部分 访问权限修饰符,包括公有的(public),私有的(private)和保护的(protected)
4、三类。 公有的成员用public来说明,一般为一些成员函数,它是提供给用户的接口功能。 私有的成员用private来说明,私有部分一般为类的成员变量,用来描述对象的属性,.,类的声明(cont.),.,本次议题,类与对象概述 类 类的声明 类的定义 对象 对象的声明与成员访问 实例化对象 类和对象的简单应用举例,.,类的定义,类的定义,类体内定义,类体外定义,类的定义即给出成员函数具体的功能实现,.,类的定义(cont.),class TPoint public: void setX( int aX ) m_iX = aX; void setY( int aY ) m_iY = aY; voi
5、d 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_1,.,类的定义(cont.),类体外定义:, :() expression; ,void Dog:yelp() coutWo Wo!endl; ,.,类的定义(cont.),class TDate public: void setDate( const int aYear, const int aMonth, c
6、onst int aDay ); bool isLeapYear() const; void display() const; private: int m_iYear; int m_iMonth; int m_iDay; ;,a_2,.,类的定义(cont.),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_iYea
7、r%4) ,a_2,.,类的定义(cont.),注意 成员函数类体外定义时,必须在函数名前面加“类名:” 若无“类名:”则该函数不是成员函数而是全局函数。 类体外定义成员函数时,类体内必须声明该成员函数! 不允许在类的声明部分对成员变量进行初始化。 将类的声明与定义分开,类的声明放到头文件,定义放到源文件中,.,本次议题,类与对象概述 类 类的声明 类的定义 对象 对象的声明与成员访问 实例化对象 类和对象的简单应用举例,.,对象的声明与成员访问,狗类 行为 吠叫 属性 名字 品种 年龄 颜色,莱丝 行为 莱丝.吠叫 属性 莱丝.名字:莱丝 莱丝.品种:黑贝 莱丝.年龄:三岁 莱丝.颜色:黑色
8、,声明莱丝是一只狗,.,对象的声明与成员访问(cont.), ;,对象名表,一个对象,对象数组,指向对象的指针,多个对象,TDate date; Dog dog;,TDate today, tomorrow;,TDate *pDate;,TDate array10;,对象引用,Dog dg; Dog ,.,对象的声明与成员访问(cont.),.; .();,TDate today; today.setDate( 1998, 10, 19 ); bool isLeap = today.isLeapYear();,TPoint point; point.setX( 100 ); point.set
9、Y( 100 ); point.move( 50, 50 ); point.display();,.,对象的声明与成员访问(cont.),-; -();,TDate *pDate = new TDate; pDate-setDate( 1998, 10, 19 ); bool isLeap = pDate-isLeapYear(); delete pDate;,TPoint *pPoint = new TPoint; pPoint-setX( 100 ); pPoint-setY( 100 ); pPoint-move( 50, 50 ); pPoint-display(); delete p
10、Point;,.,对象的声明与成员访问(cont.),(*).; (*).(); (,对象和指向对象的指针同样可以进行取地址和取值操作,.,对象的声明与成员访问(cont.),TDate *pDate = new TDate; (*pDate).setDate( 1998, 10, 19 ); bool isLeap = (*pDate).isLeapYear(); delete pDate;,TPoint point; (,.,本次议题,类与对象概述 类 类的声明 类的定义 对象 对象的声明与成员访问 实例化对象 类和对象的简单应用举例,.,实例化对象,类的实例化,栈区,堆区,静态存储区(全
11、局区),.,实例化对象:栈区中的对象,法一: 先声明类类型,再定义对象,推 荐,class Student public: void display() const . . private: int m_iNum; string m_strName; char m_cSex; ; Student stud1; /class Student stud1;,.,法二: 在声明类的同时定义对象,class Student public: void display() const coutnum: m_iNum endl; coutname: m_strName endl; coutsex: m_cS
12、ex endl; private: int m_iNum; string m_strName; char m_cSex; stud1,stud2;,实例化对象:栈区中的对象(cont.),.,法三: 不出现类名,直接定义对象,class /省略类名 public: 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;,实例化对象:栈区中的对
13、象(cont.),.,注意 通常采用先定义类,后定义对象的方法,其他方法不使用 对象占据内存单元而类类型不占据内存单元 以上方法创建的对象均在栈区,实例化对象:栈区中的对象(cont.),.,1.概念:用new创建的无名对象,存储在堆区 2.建立堆对象,new 类名,new 类名无符号整型表达式,实例化对象:堆区中的对象,可为无符号整型变量,.,实例化对象:堆区中的对象(cont.),const int KArrSize = 100; TDate *pdate = new TDate; TDate *arry = new TDateKArrSize; Dog *dog = new Dog; D
14、og *dogArr = new DogKArrSize;,.,3.释放堆对象,delete 指针名,delete 指针名,例1:A *ptr = NULL; ptr = new A;delete ptr;,例2:A *ptr = NULL; ptr = new A5;delete ptr;,实例化对象:堆区中的对象(cont.),.,注意 delete只能回收由new返回的指针指向的内存空间,包括空指针。 一个指针只能delete一次。 删除对象数组时无论几维array,delete前都只有一个。 确认不用的空间一定要delete。,实例化对象:堆区中的对象(cont.),.,实例化对象:全
15、局区中的对象,全局区中的对象和内置类型static变量存储类别规则是相同,class Student public: void setName( const string aName ) m_strName = aName void display() const coutm_strNameendl; private: string m_strName; ;,b1,.,实例化对象:全局区中的对象(cont.),static Student s_stu2; int main() Stdudent stu; stu.setName(Jim ); stu.display(); static Stud
16、ent s_stu1; s_stu1.setName(Lily ); s_stu1.display(); s_stu2.setName(Morrison); s_stu2.display(); return 0; ,.,实例化对象:对象的存储,思考:对象的存储方式?,.,对象1,对象2,对象10,.,成员函数,data1,data2,data10,对象的存储方式:,实例化对象:对象的存储(cont.),.,#include using namespace std; class Time public: void set(); private: int m_iHour; int m_iMinut
17、e; int m_iSec; ;,void Time:set() cin m_iHour m_iMinute m_iSec; int main() cout sizeof(Time) endl; return 0; ,5_2,实例化对象:对象的存储(cont.),.,注意 无论成员函数在类内还是在类外定义,成员函数都不占用对象的存储区 说成员函数是对象的只是从逻辑角度上说的,而非物理角度而言 对象的存储类别和内置类型变量相同,实例化对象:对象的存储(cont.),.,实例化对象:对象的引用,思考:对象中成员的引用方法?,.,成员的访问方式,回忆结构体的访问,#include #include
18、using namespace std; struct Student string num; char sex; string name; ; Student stu;,int main() stu.num = 007; = haha; stu.sex = M; cout stu.num stu.sex endl; return 0; ,.,通过对象名和 “ . ”访问 通过对象指针访问 通过对象引用访问,成员的访问方式,成员的访问方式(cont.),.,法一: 通过对象名访问:,对象名 . 成员名,成员的访问方式(cont.),public: void
19、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; ; int main( ) TPoint pt; pt.set( 100, 100 ); pt.display( ); /display( ); /pt.m_iX = 4; return 0; ,5_3,.,法二: 通过对象指针访问 注意 对象指针与普通变量指针的定义方法相同,成员的访问方式(cont.),对象指针 - 成员名,(*对象指针). 成员名,c
20、lass TPoint public: void display() coutdisplay(); return 0; ,5_4,.,法二: 通过对象引用访问 注意 对象引用与普通变量引用的定义方法相同,成员的访问方式(cont.),class TPoint public: 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; ; int main( ) TPoint pt; TPoint . . ,5_5,对象引用 .成员名,.,本次议题,类与对象概述 类 类的声明 类的定义 对象 对象的声明与成员访问 实例化对象 类和对象的简单应用举例,.,类和对象的简单应用举例,通过几个例子说明怎样用类设计程序,.,class Time public: int m_iHour; int m_iMinute; int m_iSec; ; int main() Time current; cout current.m_iHour; cout curren
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年桂林信息工程职业学院单招职业适应性考试题库及参考答案详解1套
- 2026年辽宁轨道交通职业学院单招职业技能测试题库及完整答案详解1套
- 2026年大理农林职业技术学院单招职业技能考试题库及答案详解1套
- 银行挖掘岗面试题及答案
- 2025年1月国开电大行管专科《监督学》期末纸质考试试题及答案
- 2025年恒丰银行深圳分行社会招聘5人备考题库参考答案详解
- 2025年西安交通大学第一附属医院耳鼻咽喉头颈外科招聘派遣制助理医生备考题库及一套参考答案详解
- 2025年北京城建华晟交通建设有限公司成熟人才招聘备考题库附答案详解
- 2025年南京六合经济开发区市场化招聘子公司相关负责人备考题库及答案详解1套
- 2025年贵州盐业(集团)安顺有限责任公司公开招聘工作人员5人备考题库参考答案详解
- 护肤销售技巧培训大纲
- 土地改良合同范本
- 煤矿安全隐患排查及整改措施
- 2025年怀集县事业单位联考招聘考试真题汇编附答案
- 房开装潢合同范本
- GJB1406A-2021产品质量保证大纲要求
- 安徽省水环境综合治理工程计价定额2025
- 运动素质知到课后答案智慧树章节测试答案2025年春浙江大学
- MOOC 模拟电子技术基础-华中科技大学 中国大学慕课答案
- 呼气末二氧化碳分压的临床应用-课件
- 扩大基础小桥表格
评论
0/150
提交评论