第9章 怎样使用类和对象.pptx

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 怎样使用类和对象9.1利用构造函数对类进行初始化9.2析构函数9.3调用构造函数和析构函数的顺序9.4对象数组9.5对象指针9.6共享数据的保护9.7对象的动态建立和释放9.8对象的赋值和复制9.9静态成员9.10 友元9.11 类模板9.1构造函数9.1.1 对象的初始化在建立一个对象时,常常需要作某些初始化的工作。如果一个数据成员未被赋值,则它的值是不可预知的,因为在系统为它分配内存时,保留了这些存储单元的原状,这就成为了这些数据成员的初始值。这种状况显然是与人们的要求不相符的,对象是一个实体,它反映了客观事物的属性(例如时钟的时、分、秒的值),是应该有确定的值的。注意: 类的数据成员是不能在声明类时初始化的。如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。class Time { public : //声明为公用成员 hour; minute; second; };Time t1={14,56,30}; //将t1初始化为14:56:30若数据成员为private或protected,不能用这种方法。和结构体变量的初始化是相似的 在第8章的例子中,是用成员函数来对对象中的数据成员赋初值的(例如例8.3中的set_time函数,用户在主函数中调用set_time函数来为数据成员赋值)。如果对一个类定义了多个对象,而且类中的数据成员比较多,那么,程序就显得非常臃肿烦琐。9.1.2构造函数的作用 为了解决这个问题,C++提供了构造函数(constructor)来处理对象的初始化。 构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。例9.1 在例8.3基础上定义构造成员函数。class Time{ public : Time( ) { hour=0; minute=0; second=0; } voidset_time(int h,int m,int s ); voidshow_time( ); private : int hour; int minute; int second;};void Time∷set_time(int h, int m,int s ) { hour=h; minute=m; second=s;}void Time::show_time( ){ couthour:minute:secendl; }int main( ){ Time t1; int hour,minute,second; cinhourminutesecond; t1.set_time(hour,minute,second); t1.show_time( ); Time t2; t2.show_time( ); return 0;} 运行结果: 10 25 54↙ 10:25:54 0:0:0也可以只在类内对构造函数进行声明而在类外定义构造函数。class Time{ public : Time( ); void set_time(int h,int m,int s ); void show_time( ); private : int hour; int minute; int second;};在类外定义构造函数:Time::Time( ) { hour=0; minute=0; second=0;}有关构造函数的使用说明: (1)在建立类对象时会自动调用构造函数。(2)构造函数没有返回值,因此也不需要在定义构造函数时声明类型,这是它和一般函数的一个重要的不同之点。(3)构造函数不需用户调用,也不能被用户调用。(4)可以用一个对象初始化另一个对象。 Time t1; Time t2=t1; (5)在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。(6)如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。在例9.1中构造函数不带参数,在函数体中对数据成员赋初值。这种方式使该类的每一个对象都得到同一组初值。但是有时用户希望对不同的对象赋予不同的初值。可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。9.1.3带参数的构造函数构造函数首部的一般格式为: 构造函数名(类型 1 形参1,类型2 形参2,…) 用户是不

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档