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做的事情 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |