类和对象 中

目录

类的6个默认成员函数

​编辑

构造函数

特征

析构函数

特性

拷贝构造函数

特征

赋值运算符重载

运算符重载

赋值运算符重载

前置++和后置++重载

日期类函数实现


类的6个默认成员函数

默认成员函数:用户没有显示显现,编译器会自己生产的成员函数为默认成员函数

类和对象 中_第1张图片

构造函数

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

构造函数时初始化对象而不是开辟空间

特征

1.函数名与类名相同

2.无返回值

3.对象实例化时编译器自动调用对应的构造函数

4.构造函数可以重载

类和对象 中_第2张图片

注意:为区别调用构造函数还是函数,调用无参函数对象后面不用带括号

5.如果类中没有显式定义构造函数,则C++编译器会自动生产成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成

6.默认生成构造函数,内置类型成员不做处理,自定义类型会去调用它的构造函数

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

类和对象 中_第3张图片

8.可以不传参调用的构造函数都可以叫默认构造

析构函数

对象在销毁时会自动调用析构函数,完成对象中资源的清理工作

特性

1.析构函数名是在类名前加上~

2.无参无返回值

3.一个类只能有一个析构函数,若未显式定义,系统会自动生成默认的析构函数,析构函数不能重载

4.在对象生命周期结束时,编译器会自动调用析构函数

5.对自定义成员调用析构函数,内置成员不调用析构函数,直接由系统回收即可

6.如果类中没有申请资源,析构函数可以不写,直接使用编译器默认生成的析构函数

拷贝构造函数

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

特征

1.拷贝构造时构造函数的一种重载形式

2.拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,会引发无穷递归调用

类和对象 中_第4张图片

3.若未显式定义,编译器会生成默认的拷贝构造函数,按内存储存按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝

内置类型完成值拷贝

自定义类型成员会调用这个成员的拷贝构造

4.类中如果没有涉及到资源申请,拷贝函数是否写都可以;一旦涉及到资源申请时,一定要写拷贝构造函数,否则就是浅拷贝,例入栈,如果不写拷贝构造,拷贝出来的栈还在用之前的空间

5.拷贝构造函数典型调用场景:

1.使用已存在对象创建新对象

2.函数参数类型时类类型对象

3.函数返回值类型时类类型对象

赋值运算符重载

运算符重载

函数名:关键字operator+操作符

函数原型:返回值类型 operator操作符(参数列表)

注意:

1.不能通过连接其他符号来创建新的操作符:operator@

2.重载操作符必须有一个类类型参数

3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义

4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this

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

类和对象 中_第5张图片

赋值运算符重载

格式:

参数类型:const T&,传递引用可以提高传参效率

返回值类型:T&,返回引用可以提高返回的效率,有返回值的目的是为了支持连续赋值

检测是否自己给自己赋值

返回*this:要复合连续赋值的含义

类和对象 中_第6张图片

赋值运算符只能重载类的成员函数不能重载成全局函数

赋值运算符重载成全局函数,注意全局函数没有this指针,要给两个参数

用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。注
意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符
重载完成赋值
如果类中未涉及到资源管理,赋值运算符是否实现都可以;一旦涉及到资源管理则必
须要实现。

前置++和后置++重载

后置++需要在参数中添加一个int

前置++:返回+1之后的结果
 注意:this指向的对象函数结束后不会销毁,故以引用方式返回提高效率

类和对象 中_第7张图片

注意:后置++是先使用后+1,因此需要返回+1之前的旧值,故需在实现时需要先将this保存
一份,然后给this+1
而temp是临时对象,因此只能以值的方式返回,不能返回引用

日期类函数实现

你可能感兴趣的:(java,开发语言)