重载逻辑 NOT 运算符以用作阶乘

问题描述 投票:0回答:1

我已经实现了一个带有重载 NOT 运算符的 Integer 类,如下所示:

#ifndef INTEGER_H
#define INTEGET_H

template <typename T>
T factorial(T t)
{
    if (t == 1)
        return 1;

    return t * factorial(t - 1);
}

class Integer
{
private:
    int value;

public:
    Integer(int v) : value{v} {};

    int getValue() const
    {
        return value;
    }

    void operator!()
    {
        value = factorial(value);
    }
};

#endif

如果我在类型名之前调用它,它就会起作用,如下所示:

#include <iostream>
#include "Integer.h"

using namespace std;

int main()
{
    Integer i{5};
    !i;
    cout << i.getValue() << endl;
}

我的要求如下:

我希望运算符位于类型名的右侧而不是左侧(i!不是!i)。这可能吗?如果是的话,怎么办?

c++ operator-overloading logical-operators factorial
1个回答
0
投票

我希望运算符位于类型名的右侧而不是左侧(i!不是!i)。这可能吗?

不,不是。运算符操作数的位置是由语言语法固定的,不能自定义,并且其中没有后缀

!
运算符。另外,我假设您的意思是“操作数”而不是“类型名称”,这在这种情况下没有意义,因为
!i
中没有类型名称。

此外,像这样超载

!
也不是一个好主意。它会让每个阅读你的代码的人感到困惑。您不仅将
!
的含义从逻辑否定更改为其他内容,而且还使
!
修改其操作数,这是普通逻辑运算符永远不会做的。

© www.soinside.com 2019 - 2024. All rights reserved.