前缀和后缀运算符继承

时间:2014-07-02 14:03:59

标签: c++ inheritance operator-overloading postfix-operator prefix-operator

请考虑以下代码:

// 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;
}

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

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

为什么会发生这种情况,为什么不继承前缀运算符?

1 个答案:

答案 0 :(得分:4)

使用以下内容导入operator--类的隐藏operator++prefix

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

Live demo

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