目录
类的6个默认成员函数
编辑
构造函数
特征
析构函数
特性
拷贝构造函数
特征
赋值运算符重载
运算符重载
赋值运算符重载
前置++和后置++重载
日期类函数实现
默认成员函数:用户没有显示显现,编译器会自己生产的成员函数为默认成员函数
构造函数是一个特殊的成员函数,名字与类名相同,在创建类类型对象时由编译器自动调用,以保证每个成员函数都有一个合适的初始值,并且在对象整个生命周期只调用一次
构造函数时初始化对象而不是开辟空间
1.函数名与类名相同
2.无返回值
3.对象实例化时编译器自动调用对应的构造函数
4.构造函数可以重载
注意:为区别调用构造函数还是函数,调用无参函数对象后面不用带括号
5.如果类中没有显式定义构造函数,则C++编译器会自动生产成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成
6.默认生成构造函数,内置类型成员不做处理,自定义类型会去调用它的构造函数
7.内置类型成员变量在类中声明时可以给默认值
8.可以不传参调用的构造函数都可以叫默认构造
对象在销毁时会自动调用析构函数,完成对象中资源的清理工作
1.析构函数名是在类名前加上~
2.无参无返回值
3.一个类只能有一个析构函数,若未显式定义,系统会自动生成默认的析构函数,析构函数不能重载
4.在对象生命周期结束时,编译器会自动调用析构函数
5.对自定义成员调用析构函数,内置成员不调用析构函数,直接由系统回收即可
6.如果类中没有申请资源,析构函数可以不写,直接使用编译器默认生成的析构函数
拷贝构造函数:只有单个形参,该形参是对本类型对象的引用(一般用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用
1.拷贝构造时构造函数的一种重载形式
2.拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,会引发无穷递归调用
3.若未显式定义,编译器会生成默认的拷贝构造函数,按内存储存按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝
内置类型完成值拷贝
自定义类型成员会调用这个成员的拷贝构造
4.类中如果没有涉及到资源申请,拷贝函数是否写都可以;一旦涉及到资源申请时,一定要写拷贝构造函数,否则就是浅拷贝,例入栈,如果不写拷贝构造,拷贝出来的栈还在用之前的空间
5.拷贝构造函数典型调用场景:
1.使用已存在对象创建新对象
2.函数参数类型时类类型对象
3.函数返回值类型时类类型对象
函数名:关键字operator+操作符
函数原型:返回值类型 operator操作符(参数列表)
注意:
1.不能通过连接其他符号来创建新的操作符:operator@
2.重载操作符必须有一个类类型参数
3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义
4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this
格式:
参数类型:const T&,传递引用可以提高传参效率
返回值类型:T&,返回引用可以提高返回的效率,有返回值的目的是为了支持连续赋值
检测是否自己给自己赋值
返回*this:要复合连续赋值的含义
赋值运算符只能重载类的成员函数不能重载成全局函数
赋值运算符重载成全局函数,注意全局函数没有this指针,要给两个参数
后置++需要在参数中添加一个int