1. 拷贝构造函数
1.1 定义
构造函数:特殊的成员函数 ,只有单个形参,该形参是对本 类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。
1.2 特征
- 拷贝构造函数是构造函数的一个重载形式。
- 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用
1.3 implementation
1.3.1下面展示一些 内联代码片
Date(const Date& d)//Date类名;用const修饰;
{
_year = d._year;
_month = d._month;
_day = d._day;
}
实现思路:
通过对象的拷贝的不断递归调用,最终达到目的;
1.3.2 若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝,或者值拷贝。
2. 赋值运算符重载
2.1 定义
运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
2.2 特征
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表)
- 不能通过连接其他符号来创建新的操作符:比如operator@
- 重载操作符必须有一个类类型或者枚举类型的操作数
- 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不 能改变其含义
- 作为类成员的重载函数时,其形参看起来比操作数数目少1成员函数的
操作符有一个默认的形参this,限定为第一个形参
- .* [成员访问(对象 . 成员)] 、::[作用域] 、sizeof[字符串长度] 、?:[三目运算符] 、 . [调用] 注意这5个运算符不能重载
2.3 implementation
下面展示一些 内联代码片
写法类似于:
Date& operator=(const Date& d)
{ //类名+operator+运算符符号()
if(this != &d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
调用运算符重载函数的完整形式:
if (d1.operator==(d2))
如果运算符重载函数不是成员函数
if (operator==(d1,d2))
简写:
if(d1==d2)//可读性高
注:this–>始终指向运算符第一个(从左往右)参数的对象;
好了,欢迎大家前来评论,共同进步!