重载operator =在c ++中有两个参数

时间:2017-04-06 15:43:24

标签: c++ class operator-overloading assignment-operator

我正在写一个这样的课:

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 =?

2 个答案:

答案 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;
}