C++中的四个默认成员函数与运算符重载详解
|
例:
Date(const Date& d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
//Date d1(2017,4);
// 下面两种用法都是调用拷贝构造函数,是等价的。
//Date d2(d1);
//Date d2 = d1;
特征 1. 拷贝构造函数其实是一个构造函数的重载。 2. 拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用。 3. 若未显示定义,系统会默认缺省的拷贝构造函数。缺省的拷贝构造函数会,依次拷贝类成员进行初始化。 赋值运算符重载 拷贝构造函数是创建的对象,使用一个已有对象来初始化这个准备创建的对象。赋值运算符的重载是对一个已存在的对象进行拷贝赋值。 5个C++不能重载的运算符:
Date& operator = (const Date& d)
{
if (this != &d)//防止重复赋值
{
this->_year = d._year;
this->_month = d._month;
this->_day = d._day;
}
return *this;
}
void Test()
{
Date d1(2017,4);
//拷贝构造
Date d2(d1);
//赋值运算符重载
Date d3;
d3 = d1;
}
3:关于隐含的this指针以及对运算符重载背后做的事情。 隐含的this指针 1. 每个成员函数都有一个指针形参,它的名字是固定的,称为this指针,this指针是隐式的。(构造函数比较特殊,没有这个隐含this形参) 2. 编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作实参传递给成员函数的第一个形参this指针。 3. this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this指针的参数定义,也不能在调用时显示传递对象的地址给this指针。 例一:在拷贝构造函数中this所做的事情
例二:在运算符重载中this做的事情
总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



