类和对象的进一步讨论.ppt

类和对象的进一步讨论.ppt

ID:56435185

大小:147.50 KB

页数:33页

时间:2020-06-18

类和对象的进一步讨论.ppt_第1页
类和对象的进一步讨论.ppt_第2页
类和对象的进一步讨论.ppt_第3页
类和对象的进一步讨论.ppt_第4页
类和对象的进一步讨论.ppt_第5页
资源描述:

《类和对象的进一步讨论.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、复习2.1面向对象程序设计方法概述2.2类的声明和对象的定义2.3类的成员函数2.4对象成员的引用2.5类的封装性和信息隐蔽2.6类和对象的简单应用举例第3章关于类和对象的进一步讨论3.1构造函数3.2析构函数3.3调用构造函数和析构函数的顺序3.4对象数组3.5对象指针3.6共用数据的保护3.7对象的动态建立和释放3.8对象的赋值和复制3.9静态成员3.10友元3.11类模板在建立一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。如果一个数据成员未被赋值,则它的值是不可预知的,因为在系统为它分配内存时,保留了这些存储单元的

2、原状,这就成为了这些数据成员的初始值。这种状况显然是与人们的要求不相符的,对象是一个实体,它反映了客观事物的属性(例如时钟的时、分、秒的值),是应该有确定的值的。注意:类的数据成员是不能在声明类时初始化的。3.1构造函数3.1.1对象的初始化如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。如classTime{public://声明为公用成员hour;minute;sec;};Timet1={14,56,30};//将t1初始化为14:56:30这种情况和结构体变量的初始化是差不多的,在一个花括号内顺序列出各公

3、用数据成员的值,两个值之间用逗号分隔。但是,如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。在前章的几个例子中,是用成员函数来对对象中的数据成员赋初值的(例如的set_time函数)。从例中可以看到,用户在主函数中调用set_time函数来为数据成员赋值。如果对一个类定义了多个对象,而且类中的数据成员比较多,那么,程序就显得非常臃肿烦琐。为了解决这个问题,C++提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它

4、,而是在建立对象时自动执行。构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。3.1.2构造函数的作用例3.1在例8.3基础上定义构造成员函数。#includeusingnamespacestd;classTime{public:Time()//定义构造成员函数,函数名与类名相同{hour=0;//利用构造函数对对象中的数据成员赋初值minute=0;sec=0;}vo

5、idset_time();//函数声明voidshow_time();//函数声明private:inthour;//私有数据成员intminute;intsec;};voidTime::set_time()//定义成员函数,向数据成员赋值{cin>>hour;cin>>minute;cin>>sec;}voidTime::show_time()//定义成员函数,输出数据成员的值{cout<

6、ime()t1.set_time();//对t1的数据成员赋值t1.show_time();//显示t1的数据成员的值Timet2;//建立对象t2,同时调用构造函数t2.Time()t2.show_time();//显示t2的数据成员的值return0;}程序运行的情况为:102554↙(从键盘输入新值赋给t1的数据成员)10:25:54(输出t1的时、分、秒值)0:0:0(输出t2的时、分、秒值)上面是在类内定义构造函数的,也可以只在类内对构造函数进行声明而在类外定义构造函数。将程序中的第4~7行改为下面一行:Time();//对构

7、造函数进行声明在类外定义构造函数:Time::Time()//在类外定义构造成员函数,要加上类名Time和域限定符“::”{hour=0;minute=0;sec=0;}有关构造函数的使用,有以下说明:(1)在类对象进入其作用域时调用构造函数。(2)构造函数没有返回值,因此也不需要在定义构造函数时声明类型,这是它和一般函数的一个重要的不同之点。(3)构造函数不需用户调用,也不能被用户调用。(4)在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。(5)如

8、果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。在例3.1中构造函数不带参数,在函数体中对数据成员赋初值。这种方式使该类的每一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。