微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 重载postfix和前缀运算符

请考虑以下代码
#include <iostream>
using namespace std;
class Digit
{

private:
    int m_digit;
public:
    Digit(int ndigit=0){
     m_digit=ndigit;
                        }
    Digit& operator++();//prefix
    Digit& operator--();   //prefix
        Digit operator++(int);
        Digit operator--(int);
        int get() const { return m_digit;}
};
Digit& Digit::operator++(){

   ++m_digit;
   return *this;
}
Digit& Digit::operator--(){
 --m_digit;
 return *this;

}
Digit Digit::operator++(int){
Digit cresult(m_digit);
++(*this);
return cresult;


}
    Digit Digit::operator--(int){
Digit cresult(m_digit);
--(*this);
return cresult;


}
    int main(){

     Digit cDigit(5);
      ++cDigit;
        cDigit++;
         cout<<cDigit.get()<<endl;
         cout<<cDigit.get()<<endl;





     return 0;
    }

这里实现了两个版本的后缀和前缀运算符,我已经读过,通过引入另一个所谓的伪参数来做出差异,但我有疑问,如果我们看到这些的声明

Digit& operator++();//prefix
             Digit& operator--();   //prefix
        Digit operator++(int);
        Digit operator--(int);

它们与& mark,那么为什么它是必要的伪参数?并且在两种情况下例如运算符都是在参数之前写的而不是它意味着它们是相同的?

解决方法

前后增量是两个不同的运算符,需要单独的重载.

C不允许仅在返回类型上进行重载,因此在示例中使用不同的返回类型将不足以消除这两种方法的歧义.

虚拟参数是C的设计者为消除歧义选择的机制.

原文地址:https://www.jb51.cc/c/115816.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐