C++ 重载运算符=在c++;
我正在写一个这样的课程:C++ 重载运算符=在c++;,c++,class,operator-overloading,assignment-operator,C++,Class,Operator Overloading,Assignment Operator,我正在写一个这样的课程: class Digit { private : int *ref; public : Digit (int a) : ref(&a) {} int get_val () { return (*ref); } Digit operator= (int &a) { if (a <
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;
}
但我得到了一些错误:'int operator=(int&,Digit&)'必须是非静态成员函数
我怎样才能解决这个问题?我怎样才能用2个参数重载operator=呢?如果我理解正确的话,我想您是在试图将数字的值作为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;
}
如果要将数字隐式转换为整数,可以使用
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;
}
#包括
无效打印(int x)
{
如果我理解正确的话,我想你是想把数字的值作为int来获取
您不打算为此使用运算符=,因为运算符=用于分配给类。您希望从类中提取一个值
您的方法:
int get_val ()
{
return (*ref);
}
已经这样做了。但是,它应该是
int get_val () const
{
return (*ref);
}
因为它不会更改任何类成员的值
用途如下:
int main()
{
Digit digit(5);
int myInt = digit.get_value();
return 0;
}
如果要将数字隐式转换为整数,可以使用
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;
}
#包括
无效打印(int x)
{
std::cout您真正需要的可能是操作符int()
然后您可以编写int a=d;
假设d
是类数字
您真正需要的可能是运算符int()
然后您可以编写inta=d;
假设d
是类数字
为什么ref
是指针?(构造函数返回时它也是无效的。)而不是思考“如何重载赋值运算符”,而是思考“如何将数字
隐式转换为int
”@molbdnilo我必须用[]运算符编写一个类,该运算符返回数字,这样我们就可以像这样使用它:a[10]=5;(a的某个成员更改为5。)@timaru我想是的。所以没有办法做到这一点?@IAMB5445——似乎您需要正确记录您正在寻找的操作。您当前的代码有多个问题,一个是使用指向临时对象的指针,第二个是非正统用法operator=
返回一个新对象,而不是*这个通过引用,即。e、 返回一个日期&
,而不是日期
。ref
为什么是指针?(构造函数返回时它也是无效的。)与其思考“如何重载赋值运算符”,不如思考“如何隐式地将数字
转换为int
”@molbdnilo我必须用[]运算符,它返回数字以便我们可以像这样使用它:a[10]=5;(a的某些成员更改为5。)@timaru我想是的。所以没有办法做到这一点?@IAMB5445——似乎您需要正确记录您正在寻找的操作。您当前的代码有多个问题,一个是使用指向临时对象的指针,第二个是非正统用法operator=
返回一个新对象,而不是*这个通过引用,即。e、 返回一个可以解决立即问题的Date&
,而不是Date>。这将解决立即出现的问题,但一旦程序被更多地参与,其中int
和数字
正在传递和返回,铸造操作人员更头疼。可能会出现“沉默”转换在你最不希望发生的地方进行。@PaulMcKenzie,这可以通过使操作符显式来解决。非常感谢!这解决了我的问题。这将解决眼前的问题,但一旦程序变得更复杂,在int
和Digit
中传递并返回运算符,就可以进行操作更令人头痛的是,可能会有“沉默”转换在你最不希望发生的地方进行。@PaulMcKenzie这可以通过使运算符显式来解决。非常感谢!这解决了我的问题。我正在编写头文件,其他人将编写主函数。我正在编写头文件,其他人将编写主函数。