C++ 前缀和后缀运算符继承
考虑以下代码:C++ 前缀和后缀运算符继承,c++,inheritance,operator-overloading,postfix-operator,prefix-operator,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 operat
// 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;
}
我试图创建一个类的层次结构。基类,仅实现前缀递增/递减运算符。并在派生类中添加后缀版本
但是,编译器找不到派生类对象的前缀操作
为什么会发生这种情况,为什么前缀运算符不会被继承?使用以下命令导入
前缀类的隐藏运算符--
和运算符+
:
struct any : prefix
{
using prefix::operator--;
using prefix::operator++;
any operator--(int) { return any(); }
any operator++(int) { return any(); }
};
这可能是一个糟糕的想法,但至少可以编译。使用以下方法导入前缀类的隐藏运算符--
和运算符+
:
struct any : prefix
{
using prefix::operator--;
using prefix::operator++;
any operator--(int) { return any(); }
any operator++(int) { return any(); }
};
这可能是一个糟糕的想法,但至少它会编译。它们被派生类中的运算符隐藏。只需将所有运算符放在同一个类中,为什么要使其更复杂?@NeilKirk只是为了学习。它们被派生类中的运算符隐藏。只需将所有运算符放在同一个类中,为什么要把它弄得更复杂?@NeilKirk只是为了学习。不知何故,我认为前缀和后缀形式是不同的运算符。但同样的事情是,基类中的函数f(int)
,派生类中的函数f(double)
。非常感谢。不知何故,我认为前缀和后缀形式是不同的运算符。但同样的事情是,基类中的函数f(int)
,派生类中的函数f(double)
。谢谢。