我已经实现了一个带有重载 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)。这可能吗?如果是的话,怎么办?
我希望运算符位于类型名的右侧而不是左侧(i!不是!i)。这可能吗?
不,不是。运算符操作数的位置是由语言语法固定的,不能自定义,并且其中没有后缀
!
运算符。另外,我假设您的意思是“操作数”而不是“类型名称”,这在这种情况下没有意义,因为!i
中没有类型名称。
此外,像这样超载
!
也不是一个好主意。它会让每个阅读你的代码的人感到困惑。您不仅将 !
的含义从逻辑否定更改为其他内容,而且还使 !
修改其操作数,这是普通逻辑运算符永远不会做的。