重载运算符 = 在 C++ 中有两个参数
overload operator = with two arguments in c++
我正在写这样的 class :
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。
问题是,我还想定义另一个 = 运算符,他也可以将数字分配给某个值。
我试过这样的事情:
int operator= (int &a, Digit &d)
{
a = d.get_value();
return a;
}
但是我得到一些错误:'int operator=(int&, Digit&)' must be a nonstatic member function
我该如何解决这个问题?我如何用 2 个参数重载运算符 =?
如果我没理解错的话,我认为你正在尝试将 Digit 的值作为 int 获取。
您不会为此使用运算符 =,因为运算符 = 用于将 分配给 和 class。您想要从 class.
中提取一个值
你的方法:
int get_val ()
{
return (*ref);
}
已经这样做了。但是,它应该是
int get_val () const
{
return (*ref);
}
因为它不会更改任何 class 成员的值。
用法为:
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;
}
但是使用运算符,您告诉编译器数字 class 可以像 int 一样处理(转换):
#include <iostream>
void Print(int x)
{
std::cout << x << std::endl;
}
int main()
{
Digit digit(5);
Print(digit);
return 0;
}
你真正需要的可能是operator int()
.
class Digit {
operator int() { return get_val(); }
};
然后你可以写 int a = d;
假设 d
是 class Digit
.
我正在写这样的 class :
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。 问题是,我还想定义另一个 = 运算符,他也可以将数字分配给某个值。 我试过这样的事情:
int operator= (int &a, Digit &d)
{
a = d.get_value();
return a;
}
但是我得到一些错误:'int operator=(int&, Digit&)' must be a nonstatic member function
我该如何解决这个问题?我如何用 2 个参数重载运算符 =?
如果我没理解错的话,我认为你正在尝试将 Digit 的值作为 int 获取。
您不会为此使用运算符 =,因为运算符 = 用于将 分配给 和 class。您想要从 class.
中提取一个值你的方法:
int get_val ()
{
return (*ref);
}
已经这样做了。但是,它应该是
int get_val () const
{
return (*ref);
}
因为它不会更改任何 class 成员的值。
用法为:
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;
}
但是使用运算符,您告诉编译器数字 class 可以像 int 一样处理(转换):
#include <iostream>
void Print(int x)
{
std::cout << x << std::endl;
}
int main()
{
Digit digit(5);
Print(digit);
return 0;
}
你真正需要的可能是operator int()
.
class Digit {
operator int() { return get_val(); }
};
然后你可以写 int a = d;
假设 d
是 class Digit
.