前缀和后缀运算符继承[重复]

Posted

技术标签:

【中文标题】前缀和后缀运算符继承[重复]【英文标题】:Prefix and postfix operators inheritance [duplicate] 【发布时间】:2014-07-02 14:03:59 【问题描述】:

考虑以下代码:

// Only prefix operators
struct prefix

    prefix& operator--()  return *this; 
    prefix& operator++()  return *this; 
;

// Try to represent prefix & postfix operators via inheritance
struct any : prefix

    any operator--(int)  return any(); 
    any operator++(int)  return any(); 
;

int main() 

    any a;

    a--;
    a++;
    --a; // no match for ‘operator--’ (operand type is ‘any’)
    ++a; // no match for ‘operator++’ (operand type is ‘any’)

    return 0;

我尝试创建类的层次结构。基类,仅实现前缀递增/递减运算符。并在派生类中添加后缀版本。

但是,编译器找不到派生类对象的前缀操作。

为什么会这样,为什么前缀运算符不被继承?

【问题讨论】:

它们被派生类中的隐藏了。 把你所有的操作符放在同一个类里,为什么要让它更复杂? @NeilKirk 仅用于学习目的。 【参考方案1】:

使用以下命令导入prefix类的隐藏operator--operator++

struct any : prefix

    using prefix::operator--;
    using prefix::operator++;
    any operator--(int)  return any(); 
    any operator++(int)  return any(); 
;

Live demo

这可能是一个糟糕的想法,但至少它会编译。

【讨论】:

不知何故,我将前缀和后缀形式视为不同的运算符。但事实证明,基类中的函数f(int) 和派生类中的f(double) 是一样的。非常感谢。

以上是关于前缀和后缀运算符继承[重复]的主要内容,如果未能解决你的问题,请参考以下文章

栈技巧之Note001-前缀和中缀及后缀表达式

前缀中缀后缀表达式

在啥情况下(如果有),C 中前缀和后缀递增/递减运算符之间的性能是不是存在差异? [复制]

前缀/后缀增量运算符

前缀/后缀增量运算符

前缀中缀后缀表达式