类和对象(中篇)

本文介绍了C++中的构造函数,包括其特性、默认构造函数和作用。接着讨论了析构函数,用于对象生命周期结束时的资源清理。此外,还讲解了拷贝构造函数在对象创建时的作用,以及何时需要自定义拷贝构造函数以避免浅拷贝问题。最后提到了运算符重载,特别是赋值运算符重载的注意事项和最佳实践。
摘要由CSDN通过智能技术生成

目录

 构造函数

析构函数

运算符重载


 构造函数

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成 员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次

特性:

构造函数并不是开空间创建新对象,而是初始化函数

1、函数名与类名相同

2、没有返回值

3、对象实例化编译时自动调用

4、函数可以重载

函数重载时,带参跟不带参能够自动匹配,但是需要注意不带参数时,后面不要加()

无参构造函数、全缺省构造函数、编译器默认生成的构造函数,都称为默认构造函数

注意:两个默认构造函数不能同时出现,否则就会出现如下问题

C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型,如: int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型

内置类型成员变量在类中声明时 可以给默认值

定义自定义类型时,如果不写构造函数,编译器会生成默认构造函数

定义内置类型时,编译器不会生成默认构造函数

析构函数

析构函数不是销毁对象,局部对象销毁是由编译器来做的,在销毁对象时会自动调用析构函数,来完成资源清理工作

特性

1、函数名时~加上类名

2、无参数无返回类型

3、对象生命周期结束时自动调用

4、一个类只能有一个析构函数,析构函数不能重载

注意:当类中没有申请资源空间,可以不用写析构,如果有资源空间申请,必须写析构函数,防止资源泄露

拷贝构造函数

只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。

特性:

1、是构造函数的重载形式

2、只有一个参数,参数本类类型对象的引用(一般常用const修饰),如果不用引用而用传值传参,编译器会报错,会引发无穷递归

3、不显示定义,编译器自动生成的默认的拷贝构造函数,是属于浅拷贝(值拷贝),按照内存储存字节顺序拷贝

注意:对于一些简单的自定义类型和内置类型可以不用写拷贝构造,当有较为复杂,动态开辟空间需要自己写

运算符重载

运算符重载是具有特殊函数名的函数,与普通函数类似,operator加符号,构成的需要是有意义的运算符

特性

1、至少有一个参数,第一个参数是隐藏的this 

2、参数是类类型的参数

3、.*   ::   sizeof   ?:   .  注意以上5个运算符不能重载。

赋值运算符重载

1、返回类型:类类型的引用(提高效率,减少返回值拷贝)

2、返回值是为了可以连续赋值

3、检测当自己给自己赋值的情况(相等 返回自身)

注意:赋值运算符不要重载成全局函数,否则就会如下报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值