![面向对象程序设计与实践:第九讲 关于类和对象的进一步讨论_第1页](http://file4.renrendoc.com/view/30f7b834cb3879bbf2b070f6afa664fe/30f7b834cb3879bbf2b070f6afa664fe1.gif)
![面向对象程序设计与实践:第九讲 关于类和对象的进一步讨论_第2页](http://file4.renrendoc.com/view/30f7b834cb3879bbf2b070f6afa664fe/30f7b834cb3879bbf2b070f6afa664fe2.gif)
![面向对象程序设计与实践:第九讲 关于类和对象的进一步讨论_第3页](http://file4.renrendoc.com/view/30f7b834cb3879bbf2b070f6afa664fe/30f7b834cb3879bbf2b070f6afa664fe3.gif)
![面向对象程序设计与实践:第九讲 关于类和对象的进一步讨论_第4页](http://file4.renrendoc.com/view/30f7b834cb3879bbf2b070f6afa664fe/30f7b834cb3879bbf2b070f6afa664fe4.gif)
![面向对象程序设计与实践:第九讲 关于类和对象的进一步讨论_第5页](http://file4.renrendoc.com/view/30f7b834cb3879bbf2b070f6afa664fe/30f7b834cb3879bbf2b070f6afa664fe5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计与实践第九讲 关于类和对象的进一步讨论对象的初始化 class Timepublic: /声明公有成员 int hour, minute, sec;Time t1 = 14, 56, 30; /将t1初始化为14:56:30创建对象时如不初始化,成员值不可预知类外初始化公有数据成员构造函数私有数据成员构造函数的特点特殊的成员函数,无需显式调用,在建立对象时自动执行名字固定为类名,且没有函数类型,不返回任何值可根据初始化要求重载构造函数不提倡在其中加入与初始化无关的内容如没有定义构造函数,系统会自动生成一个构造函数,只是没有参数,函数体为空,不执行初始化操作不带参数的构造函数cl
2、ass Timepublic:Time() /定义构造成员函数,函数名与类名相同 hour = minute = second = 0; void setTime(int h, int m, int s); /设置时间void showTime(); /显示时间private: int hour, minute, second;不带参数的构造函数int main( )Time t1; /建立对象t1,调用构造函数t1.Time() t1.showTime(); /显示t1的数据成员的值 Time t2; /建立对象t2,构造函数t2.Time()t2.showTime(); /显示t2的数据成
3、员的值return 0;该类的每一个对象都得到同一组初值带参数的构造函数class Timepublic:Time(int h, int m, int s) /带参数的构造函数 hour = h; minute = m; second = s; void setTime(int h, int m, int s); /设置时间void showTime(); /显示时间private: int hour, minute, second;带参数的构造函数Time(int h, int m, int s):hour(h),minute(m),second(s)int main( )Time t1(1
4、7, 25, 33); /建立对象t1 t1.showTime(); /显示t1的数据成员的值 Time t2; /建立对象t2t2.showTime(); /显示t2的数据成员的值return 0;参数初始化表:在函数首部初始化数据定义出错构造函数的重载class Timepublic:Time(int h, int m, int s) /构造函数 hour = h; minute = m; second = s; Time() /重载构造函数 hour = minute = second = 0; void setTime(int h, int m, int s); /设置时间void s
5、howTime(); /显示时间private: int hour, minute, second;默认构造函数带默认参数的构造函数class Timepublic:/带默认参数的构造函数 Time(int h = 10, int m = 10, int s = 10) hour = h; minute = m; second = s; void showTime(); /显示时间private: int hour, minute, second;默认构造函数析构函数 释放对象空间之前完成一些清理工作特殊的成员函数,无需显式调用,在对象生命期结束释放时自动执行名字固定为类名前加“”符号,且没有
6、函数类型,不返回任何值,也没有函数参数,不能被重载如没有定义析构函数,系统会自动生成一个析构函数,只是函数体为空,不执行任何操作析构函数的作用并不是删除对象析构函数示例class Demo /声明Demo类public:Demo(int id) : ID(id) /定义构造函数 cout Construct ID endl; Demo() /定义析构函数 cout Deconstruct ID hour = 20; /通过指针访问对象成员对象指针:指向运算符 -this 指针void main( )Time t1; t1.showTime(); Time t2; t2.showTime();t
7、1hmst2hmsShowTime()cout h m s;thisShowTime()cout h m s;成员函数都有的指向本类对象的特殊指针隐式调用共用数据的保护凡是只读的数据,都应定义为const常对象常成员变量常成员函数指向对象的常指针指向常对象的指针对象的常引用常对象对象的值不能修改类名 const 对象名(实参表列); const 类名 对象名(实参表列);const Time t1(10,15,36); /定义常对象t1t1.setTime(); /调用非常成员函数,非法常对象只能调用常成员函数常成员函数不能修改对象中所有数据成员的值类型名 函数名(参数表列) const ;v
8、oid showTime() const;const Time t1(10,15,36); /定义常对象t1t1.showTime(); /常对象可以调用常成员函数常成员函数不能调用非常成员函数常成员变量数据成员的值不能修改class Time private: const int hour; int const minute;Time:Time(int h, int m) : hour(h), minute(m) 只能在构造函数中用初始化表进行初始化关系小结类常成员变量常成员函数非常成员变量非常成员函数非常对象关系小结类常成员变量常成员函数非常成员变量非常成员函数常对象指向对象的常指针指针的
9、值不能改变,始终指向其初值类名* const 指针变量名;Time t1(10, 12, 15), t2; /定义对象Time* const p = &t1;/定义常指针p = &t2; /错误,指针p不能改变指向*p = t1; /正确,指针p指向的对象可以改变常指针所指向对象的值可以改变指向常对象的指针不能通过指针改变其所指向对象的值const 类名* 指针变量名; Time const t1(10,12,15); /定义常对象const Time* p = &t1; /定义常对象指针p-hour = 20; /错误,指向的对象值不能修改Time t2; p = &t2; /可以指向非常对
10、象p-hour = 20; /可以这样吗?t2.hour = 20; 形参为非常对象指针时实参不能为常对象指针对象的常引用不能通过引用改变对象的值const 类型名& 变量名 = 变量名2; Time t1(10, 12, 15); /定义对象const Time& t2 = t1; /定义常引用t2t2.hour = 20; /错误,常引用不能改变值t1.hour = 20; /正确,非常对象可以改变值常引用一般作为函数的形参关系小结非常对象常对象非常引用指向对象的常指针指向常对象的指针常引用const小结类型形式含义常对象Time const t1;t1是常对象,其值不能改变常数据成员co
11、nst int hour; 不能修改hour的值常成员函数void Time:fun() constfun是不能修改本类的数据成员指向对象的常指针Time* const p;p的指向不能改变指向常对象的指针const Time* p;不能通过p改变指向的对象的值对象的常引用const Time& t1 = t;不能通过t1改变对象的值对象的动态建立和释放用new和delete运算符动态建立或撤销对象Time* pt = new Time(); /动态创建对象delete pt; /释放对象,调用析构函数Time* pt = new Time(); Time t1;pt = &t1; /修改了p
12、t的指向对象delete pt; /释放了对象t1Time* const pt = new Time();/建议赋值给常指针对象的赋值和复制赋值:将一个对象的值赋给另一同类对象复制:根据已有的对象创建新的对象Time t1(10, 12, 15), t2; /定义对象t2 = t1; /对象赋值Time t1(10, 12, 15);Time t2 = t1; /用t1初始化t2Time t3(t1); /根据t1复制t3拷贝构造函数拷贝构造函数拷贝构造函数的一般形式类型名(const 本类型名& 变量名); Time:Time(const Time& t) hour = t.hour; mi
13、nute = t. minute; second = t.second;必须是本类对象如未定义,系统自动创建默认拷贝构造函数拷贝构造函数的调用定义对象Time t1;Time t2(t1);实参是对象Time t1;func(t1);返回值是对象Time t1;t1 = func();自动调用拷贝构造函数静态数据成员class Timepublic: static int hour; /公有静态数据成员 int minute, second;int Time:hour = 10; /必须类外初始化静态数据成员实现同类对象间的数据共享static 类型名 变量名; 静态数据成员void main() Time t1; cout t1.hour endl; /通过对象名引用静态数据成员 cout Time:hour endl; /通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部编版八年级历史(上)第4课洋务运动听课评课记录
- 环保合作项目协议书
- 2022年新课标八年级上册道德与法治《第六课 角色与责任同在 》听课评课记录(2课时)
- 苏科版数学七年级下册7.2《探索平行线的性质》听评课记录1
- 湘教版数学八年级上册1.3.3《整数指数幂的运算法则》听评课记录
- 无锡苏教版四年级数学上册《观察由几个正方体摆成的物体》听评课记录
- 湘教版数学九年级下册2.6《弧长与扇形面积》听评课记录2
- 可转股债权投资协议书范本
- 投资框架协议书范本
- 多人合办店铺合伙协议书范本
- 卫生院安全生产知识培训课件
- 口腔医院感染预防与控制1
- 发生输液反应时的应急预案及处理方法课件
- 中国旅游地理(高职)全套教学课件
- 门脉高压性消化道出血的介入治疗课件
- 民航保密培训课件
- 儿童尿道黏膜脱垂介绍演示培训课件
- 诗词写作入门
- 学校教育中的STEM教育模式培训课件
- 电器整机新产品设计DFM检查表范例
- 桩基础工程文件归档内容及顺序表
评论
0/150
提交评论