【发布时间】:2023-03-13 21:12:02
【问题描述】:
我正在写这样的课程:
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);
}
};
所以如果有人定义了一个数字,他不能给它分配大于 9 或小于 0 的值。 问题是,我还想定义另一个 = 运算符,他也可以将 Digit 分配给某个值。 我尝试过这样的事情:
int operator= (int &a, Digit &d)
{
a = d.get_value();
return a;
}
但我得到一些错误:'int operator=(int&, Digit&)' must be a nonstatic member function
我该如何解决这个问题?如何用 2 个参数重载 operator =?
【问题讨论】:
-
为什么
ref是一个指针? (构造函数一返回也是无效的。) -
与其想“我怎样才能重载赋值运算符”,不如想“我怎样才能将
Digit隐式转换为int”。 -
@molbdnilo 我必须用 [] 运算符编写一个返回数字的类,这样我们就可以像这样使用它:a[10] = 5; (以及对 5 进行更改的一些成员。)
-
@timaru 我想是的。所以没有办法做到这一点?
-
@iambb5445 -- 似乎您需要正确记录您正在寻找的操作。您当前的代码有多个问题,一个是使用指向临时对象的指针,第二个是
operator =通过引用返回新对象而不是*this的非正统用法,即返回Date&,而不是Date。
标签: c++ class operator-overloading assignment-operator