织梦做网站需要钱吗,wordpress付费阅读chajian,怎么用织梦做购物网站,南宁网站建设哪目录
1.赋值运算符重载
1.1运算符重载
1.2赋值运算符重载
1.2.1赋值运算符重载格式
1.2.2赋值运算符只能重载成成员函数不能重载成全局函数
1.2.3同拷贝函数一样#xff0c;如果类是形如日期类这样变量全是内置类型的#xff0c;赋值运算符就必须自己实现#xff0c;…目录
1.赋值运算符重载
1.1运算符重载
1.2赋值运算符重载
1.2.1赋值运算符重载格式
1.2.2赋值运算符只能重载成成员函数不能重载成全局函数
1.2.3同拷贝函数一样如果类是形如日期类这样变量全是内置类型的赋值运算符就必须自己实现用编译器默认生成的就行但是如果涉及到资源管理就必须要自己实现赋值运算符。
1.3前置和后置重载
2.const成员函数
3.取地址及const取地址操作符重载 时光不语我们都在努力 这里是来自M--Y的专栏C启航 以下内容均为个人见解如有不足还请指出 期待大家的点赞、收藏、评论互三必回诸君共勉 类中的6个默认成员函数
1.赋值运算符重载
1.1运算符重载 运算符重载提高代码可读性。函数命名为关键字operator后面接需要重载的运算符符号
特别注意 1.不能通过连接其他符号来创建新的操作符如operator 2.重载操作符必须有一个类类型参数 3.用于内置类型的运算符其含义不能改变 4.作为类成员函数重载时其形参看起来比操作数数目少1这是因为成员函数的第一个参数是隐式的this 5..* sizeof ?; .这五个运算符不支持重载 class Date { public: // …… private: int _year; int _month; int _day; } bool operator(const Date d1,const Date d2) { //…… } 如果和上述代码一样定义成全局函数的话就无法访问到Date类中的私有成员变量如果要使代码编译通过的话就必须将上述代码标红处给注释掉。
这样处理的话显得过于麻烦所以不如将函数封装成成员函数。
封装成成员函数的时候我们需要注意一点上面注意4提到成员函数的第一个参数是隐式的this所以在代码上要做些许调整。 class Date { public: bool operator(const Date d) { return _yeard._year _monthd._month _dayd._month; } private: int _year; int _month; int _day; } ; 1.2赋值运算符重载
1.2.1赋值运算符重载格式 1.参数类型const T(传递引用可以提高传参效率) 2.返回值类型T。返回引用可以提高效率同时在有些情况下可以支持连续赋值 3.检测是否自己给自己赋值 4.返回*this。目的连续赋值下文会细讲
1.2.2赋值运算符只能重载成成员函数不能重载成全局函数
原因如果用户将赋值运算符实现成全局的话编译器就会自己生成一个默认的成员函数这样两者就会产生冲突了 class Date { public: //…… Date operatorconst Dated { _yeard._year; _monthd._month; _dayd._day; return *this; } }; 1.2.3同拷贝函数一样如果类是形如日期类这样变量全是内置类型的赋值运算符就必须自己实现用编译器默认生成的就行但是如果涉及到资源管理就必须要自己实现赋值运算符。
1.3前置和后置重载
思考由上面叙述可以联想到关于的运算符重载的函数名应该是operator但是这样的话如何区分前置和后置呢
为了区分C特别规定后置重载时多加一个int类型的参数但是调用时不用传参编译器会自动传递。 //前置 Date operator() { _day; _month; _year; if(_dayGetMonthday())//实现输出某年某月的天数 { _day-GetMonthday(); _month } if(_month13) { _month-12; _year; } return *this; } 后置 //注意后置是先是有后1因此需要一个临时变量来保存原来的值所以函数的返回值应该是Date而不是Date Date operator(int) { Date temp*this; //重复上述前置步骤 return temp; } 其实关于运算符的重载有很多,-,,-,,,,。但是如果每个运算符都按上述方式代码就会显得十分冗长。有没有什么办法呢 答案是肯定的。 Date Date:: operator(int day)//日期天数日期 { _day day; while (_day GetMonthDay(_year, _month)) { _day - GetMonthDay(_year, _month); _month; if (_month 13) { _year; _month 1; } } while (_day 0) { _month--; if (_month 0) { _year--; _month 12; } _day GetMonthDay(_year, _month); } return *this; } 以上上为例当我们实现一个运算符重载后和它相关的运算符重载就会变得很简单实现只需要进行复用就行 。 Date operator-(int day)//日期-天数日期 { return *this-day } Date operator() { return *this1; } Date operator(int) { Date temp*this; *this1; return temp; } 其他的运算符重载也和这类似感兴趣的可以自己去尝试实现。
2.const成员函数
用cosnt修饰的成员函数被称为const函数实际上const修饰的是成员函数中的this但是一般const修饰变量会加在其前面而this是隐式的如何表示修饰的是this呢
C规定将cosnt在函数后面就表示对this的修饰。 Date operator(int day) const { //…… } 3.取地址及const取地址操作符重载
这两个函数一般不用重新定义不是特殊情况编译器会自动生成的够用。 Date* operator() { return this; } const Date* operator() const { return this; }