if{$_REQUEST($_SESSION['role0'])
echo 'some lists';
}
所以如果有人定义了一个数字,他就不能为它分配超过9或小于0的值。 问题是,我还想定义另一个=运算符,他也可以将Digit分配给某个值。 我试过这样的事情:
class Digit
{
private :
int *ref;
public :
Digit (int a) : ref(&a) {}
int get_val ()
{
return (*ref);
}
Digit operator= (int &a)
{
if (a < 0 || a > 9)
throw "invalid digit assignment.";
(*ref) = a;
return (*this);
}
};
但是我收到了一些错误:int operator= (int &a, Digit &d)
{
a = d.get_value();
return a;
}
我该如何解决这个问题?我怎么能用2个参数重载operator =?
答案 0 :(得分:3)
您真正需要的可能是operator int()
。
class Digit {
operator int() { return get_val(); }
};
然后,您可以写int a = d;
,假设d
属于class Digit
。
答案 1 :(得分:0)
如果我理解正确的话,我认为你试图将Digit的值作为int。
您不会使用operator =,因为operator =用于将分配给类。您想从类中提取值。
你的方法:
int get_val ()
{
return (*ref);
}
已经这样做了。但是,它应该是
int get_val () const
{
return (*ref);
}
因为它不会改变任何类成员的值。
用法是:
int main()
{
Digit digit(5);
int myInt = digit.get_value();
return 0;
}
如果要隐式将Digit转换为int,可以使用
operator int()
{
return get_val();
}
这只是一个捷径。如果没有该运算符,您可以执行以下操作:
#include <iostream>
void Print(int x)
{
std::cout << x << std::endl;
}
int main()
{
Digit digit(5);
Print(digit.get_value());
return 0;
}
但是对于运算符,您告诉编译器Digit类可以像int一样处理(转换):
#include <iostream>
void Print(int x)
{
std::cout << x << std::endl;
}
int main()
{
Digit digit(5);
Print(digit);
return 0;
}