[高等教育]4 类和对象二.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[高等教育]4 类和对象二

类和对象(二) 构造函数和析构函数 构造函数:在创建对象时,使用给定的值初始化对象的数据成员 析构函数:用来释放对象动态申请的存储空间 构造函数和析构函数的形式 构造函数函数名与类名相同 析构函数的函数名与类名也相同,但函数名前冠以“~” 例:定义一个日期类 关于构造函数的说明 构造函数的名字与类名相同,但该函数不能指定返回值。 构造函数可以无参数,也可以有多个参数。 构造函数可以重载。即在一个类中,可以定义多个参数个数不同的构造函数以便满足不同要求的初始化需求。 构造函数是在系统创建对象时由系统自动调用 构造函数必须为类的公有成员。 关于析构函数的说明 析构函数不能指定返回值类型,也不能有参数 一个类中只能定义一个析构函数 析构函数在下面两种情况下被自动调用: 当一函数执行完毕,该函数中定义的对象的析构函数自动被调用 用new创建对象,后用delete释放该对象,delete自动调用析构函数 构造函数和析构函数的使用举例 对于前面所定义的日期类,假如我们将它的定义放在“date.h”文件中,有下面的程序: #include “iostream.h” #include “date.h” void main() { date date1(1999,9,12),date2(1999,8,23); date1.print(); date2.print(); } 缺省的构造函数 在类定义时若没有定义任何构造函数,则编译系统自动为该类生成一个不带参数的缺省的构造函数,其格式如下: 类名::缺省的构造函数名(){ } 对于用缺省的构造函数初始化的数据成员,其值不定,一般为空或0值。 class NN { private: int x,y; public: void print() { cout“x=”x“y=”y“\n”; } }; 有如下的主函数: # include “iostream.h” void main( ) { NN a; a.print( ); } 缺省的析构函数 当类中没有定义析构函数时,系统自动生成一如下形式的析构函数: 类名::~缺省析构函数名() { } 拷贝初始化构造函数 拷贝初始化构造函数是用一个已知的对象来初始化一个被创建的同类的对象的特殊的成员函数。 格式如下: 类名::初始化函数构造函数名(类名 引用名) 当遇到下列三种情形时,编译系统调用拷贝初始化构造函数完成初始化操作: 1、用一个对象初始化另一个对象 2、对象作为函数的实参传递给函数的形参 3、当一个函数的返回值为对象 有如下类定义: void main() { M m1(2,3); M m2(m1); kk(m2).display(); } 具有对象成员的类的构造函数 若一个类中具有若干个其他类的对象成员,则该类的构造函数应当提供调用对象成员所属类的构造函数的途径,以便完成对对象成员的初始化。 例:若类的定义如下: class X { 类名1 成员名1; 类名2 成员名2; …… 类名n 成员名n; }; 该类的构造函数应按照下列形式设计: X::X(参数表0):成员名1(参数表1),成员名2(参数表2),…,成员名n(参数表n) {……} 其中,参数表0中提供初始化成员所需要的所有数据,参数表i中的数据一般来自参数表0 请看下面定义的类: class M { private: int x,y; N n; public: M(int i,int j,int k):n(k) {x=i;y=j;} void print( ); }; void M::print( ) { n.print( ); cout“x=”x“,y=”y“\n”; } class AB { private: int i,j; A a; B b; public: AB(int a,int b,float c,float d,float e,int f, int k):a(f,k),b(c,d,e) {i=a;j=b;} 问题2:该例子涉及到调用三个类的构造函数,这些构造函数是如何调用的? 问题3

文档评论(0)

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

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

1亿VIP精品文档

相关文档