类的构造函数、析构函数、复制构造函数和赋值操作符

类的构造函数、析构函数、复制构造函数和赋值操作符

ID:38719000

大小:49.50 KB

页数:8页

时间:2019-06-18

类的构造函数、析构函数、复制构造函数和赋值操作符_第1页
类的构造函数、析构函数、复制构造函数和赋值操作符_第2页
类的构造函数、析构函数、复制构造函数和赋值操作符_第3页
类的构造函数、析构函数、复制构造函数和赋值操作符_第4页
类的构造函数、析构函数、复制构造函数和赋值操作符_第5页
资源描述:

《类的构造函数、析构函数、复制构造函数和赋值操作符》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、类的构造函数、析构函数、复制构造函数和赋值操作符作者:lyb661时间:20140318首先,回顾一下有关函数的知识。函数声明一般由三个部分组成:返回类型、函数名和由圆括号括起来的参数表。(1)函数可以没有返回类型,这时返回类型由void表示;(2)函数名标志函数的接口,也是与其他函数区别的标志;(3)函数可以没有参数,也可以有一至多个参数;(4)可以根据参数类型、数量的差别重载函数。例如:intsum(inta,intb);voidwrite(charc);voiddisplay()const;重载函数的例子:voidswap(intx,inty);

2、voidswap(doublex,doubley);上面是一些带有内置类型参数的函数的例子。类类型同样有与自己相关的函数。其中有几个特殊的成员函数,对类来说至为重要。1、类的构造函数(consructor):构造函数用于创建类对象时完成必要的初始化工作。所有的类都需要构造函数。它没有返回类型,函数与类同名,可以没有,也可以有多个参数,如果必要。////////////////////////////////////【例1】Data_class1#includeusingstd::cout;usingstd::endl;classDa

3、ta{intvalue;public:Data(intinitial=0):value(initial){}//构造函数constructorintread()const{returnvalue;}voidwrite(inti){value=i;}};intmain(){Dataa(10);8cout<

4、/////////////关于构造函数有以下几点:(1)对于任何类,编译器会自动调用一个默认的构造函数;(2)如果定义了自己的构造函数,则默认的构造函数将不再工作;(3)同一般的函数一样,构造函数也可以被重载。(4)可以定义默构造函数,如编译器合成的那样工作。Data(intinitial=0):value(initial){}就是一个重载的有默认值的构造函数。当创建对象a(10)时只有调用它才能正常工作。注意到该构造函数的参数有个默认值"0"。如果没胡这个0,则对象b就不能被建立。它代替默认构造函数的部分工作。对于这个简单的Data类,它的默认构造函

5、数应该是这样:Data(){}。这个由编译器合成的构造函数用于创建一个对象而不显式地初始化。如果用这个默认构造函数替换我们自己定义的构造函数,则a对象的建立是无效的,而对象b的成员初始值是无定义的,有兴趣的话可以自己试一试。当然,也可以用成员函数read()来完成一些初始化工作。总之,像这样一个简单的类,默认构造函数的工作也不是尽如人意的。对于复杂一点的类呢?////////////////////////////////////【例2】Data_class2(警告:本程序有内存泄漏风险不要上机运行)#includeusingstd

6、::cout;usingstd::endl;classData{int*ip;public:Data(int&i):ip(newint(i)){}8~Data(){deleteip;}//destructorintread()const{return*ip;}voidwrite(intn){*ip=n;}};intmain(){intobj=10;Dataa(obj);cout<

7、//本例是上一例的改进,由于类具有指针成员,并且申请自由存储,所以重新定义了析构函数的行为,用于删除指针。2、类的析构函数(destructor):析构函数与类同名,在名字前加符号~以与构造函数相区别。析构函数用于在类对象超出作用域时按类中声明次序的逆序撤销各个成员。与构造函数有所不同:尽管类定义了自己的析构函数,编译器合成的析构函数也会正常工作。由于函数重载规则的限制,析构函数是不能被重载的。为什么?我们所谓自定义的意思,不过在它常规工作量外给它加了点的担子。对于上面的Data类来说,它的默认的析构函数~Data(){}的工作并不能令人满意。该类有一

8、个int类型的指针成员,在程序运行过程中由该指针申请了自由存储,所以必须定义一个析构函数,在程

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

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

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