类的6个默认成员函数

类的6个默认成员函数

即使在空类中,编译器也会自动生成如下6个成员函数:
在这里插入图片描述

学习角度

我们从以下两个方面学习这几个函数:
①基本语法特性:函数名,参数,返回值,调用的时候。
②编译器默认生成这个函数时,函数的作用

一、构造函数

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

特性:
①函数名与类名相同
②无返回值
③对象实例化时编译器自动调用对应的构造函数
④构造函数可以重载
⑤无参的构造函数和全缺省的构造函数都为默认构造函数,并且默认构造函数只能有一个。
⑥默认构造函数只对自定义类型进行初始化,对内置类型不处理。

初始化列表

在下列情况初始化必须在初始化列表中:
①引用成员变量
②const成员变量
③自定义类型成员(此类没有默认成员函数)
由于引用成员和const成员都不能在函数体内用=进行初始化,因此都须在初始化列表中进行初始化。

二、析构函数

概念:与构造函数功能相反,析构函数在对象销毁时调用,完成类的一些资源清理工作。

特性:
①析构函数名是类名前加上字符~
②无参数无返回值
③一个类有且只有一个析构函数,若未显式定义,系统自动生成默认的析构函数。
④对象生命周期结束时,C++编译系统自动调用析构函数。
⑤编译器自动生成的析构函数,对自定义成员进行调用。

三、拷贝构造函数

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

特性:
①拷贝构造函数是构造函数的一个重载形式。
②拷贝构造函数的参数只有一个且必须用引用传参,使用传值的方式会引发无穷递归调用。
③内置类型进行浅拷贝,自定义类型进行深拷贝。

拷贝构造函数一般在以下情况下被调用:
①用于对象的初始化:
Date d1(0,0,0);
Date d2(d1);
Date d3=d1;//用于初始化调用拷贝构造函数
②函数传参为传值时,会先调用拷贝构造函数对形参进行初始化
③函数返回值为类时,先调用拷贝构造函数,再返回

四、赋值运算符重载

概念:运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

特性:
①函数名字为:关键字operator后面加需要重载的运算符符号
②函数模型为:返回值类型+operator+操作符+(参数列表)
③ 其中*、::、sizeof、?:、.五个运算符不能重载。

调用时与拷贝构造函数的区别:
若产生新对象(初始化)则调用拷贝构造函数;对已有对象进行赋值则调用赋值运算。
Date d1(0,0,0);
Date d2;
d2 = d1;//先创建d2对象,再赋值,这里不调用拷贝构造函数
-----------------------------------------------------------------------------------------
Date d1(0,0,0);
Date d2=d1;//用于初始化调用拷贝构造函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值