欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

程序设计实习MOOC/自增和自减运算符的重载

发布时间:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 程序设计实习MOOC/自增和自减运算符的重载 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

自增和自减运算符的重载

问题

编写CDemo类,使得下面程序可以正常运行

int main(){CDemo d(5);cout << (d++) << ",";cout << d << ",";cout << (++d) << ",";cout << d << endl;cout << (d--) << ",";cout << d << ",";cout << (--d) << ",";cout << d << endl;return 0; }

输出结果

5,6,7,7 7,6,5,5

分析

自增++自减--运算符有前置和后置之分,为了区分,后置运算符多一个参数int。
前置运算符:作为一元运算符重载,可以重载为成员函数也可以重载为全局函数(返回值到底是不是引用?)。
后置运算符:作为二元运算符重载,多写一个参数int,但是没有实际意义。可以重载为成员函数也可以重载为全局函数。返回值不是引用!不是引用!不是引用!

强调:后置运算符多一个参数int,返回值不是引用。

为了cout可以正常输出,重载类型强制转换运算符int作为成员函数。

类型强制转换运算符重载

不能写返回值类型 实际上其返回值类型为类型强制转换运算符代表的类型

运算符重载的注意事项

  • C++不允许定义新的运算符
  • 重载后运算符的含义应该符合日常习惯
  • 运算符重载不改变运算符的优先级
  • 以下运算符不能够被重载:. .* :: ?: sizeof
  • 以下运算符重载是必须声明为类的成员函数:() [] ->
  • 流提取>>和流插入<<运算符只能重载为全局函数,第一个参数ostream对象必须为引用。
  • 完整代码

    #include<iostream> using namespace std; class CDemo{ public:CDemo(int num = 0):n(num){}CDemo operator++(); //前置++,成员函数CDemo operator++(int); //后置++,成员函数friend CDemo operator--(CDemo&); //前置--,友元函数friend CDemo operator--(CDemo&, int); //后置--,友元函数operator int(){ //强制类型转换运算符重载return n;} // friend ostream& operator<<(ostream& co, const CDemo& d); // friend istream& operator>>(istream& ci, CDemo& d); private:int n; }; //前置++ CDemo CDemo::operator++(){n++;return *this; } //后置++ CDemo CDemo::operator++(int){CDemo temp(*this);n++;return temp; } //前置-- CDemo operator--(CDemo& d){d.n--;return d; } //后置-- CDemo operator--(CDemo& d, int){CDemo temp(d);d.n--;return temp; } //ostream& operator<<(ostream& co, const CDemo& d){ // co << d.n; // return co; //} //istream& operator>>(istream& ci, CDemo& d){ // ci >> d.n; // return ci; //} int main(){CDemo d(5);cout << (d++) << ",";cout << d << ",";cout << (++d) << ",";cout << d << endl;cout << (d--) << ",";cout << d << ",";cout << (--d) << ",";cout << d << endl;return 0; }

    总结

    以上是生活随笔为你收集整理的程序设计实习MOOC/自增和自减运算符的重载的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。