如何将对象的特定值分配给长变量?

时间:2011-04-10 22:14:01

标签: c++ operator-overloading operator-keyword

示例:

long a;
BoundedCounter e;

所以我想将类中私有变量计数器的值赋给。

a=e;

尝试使用此:

long int & operator=(long b)
{
    b=counter;
    return b;
}

long int & operator=(long b, BoundedCounter &a)
{
   b=a.getCounter();
   return b;
}

返回编译错误:

  

无法在作业中转换BoundedCounter' to long int'

  

`long int& operator =(long int,BoundedCounter&)'必须是非静态成员函数

如何定义一个operator =在类的外部,当左侧是正常变量而不是对象时,它将起作用?

2 个答案:

答案 0 :(得分:2)

operator=不适用于此,因为赋值的左侧是基本类型(并且您无法为基本类型定义operator=)。尝试给BoundedCounter operator long,例如:

class BoundedCounter
{
public:
    // ...
    operator long() const
    {
        return counter;
        // or return getCounter();
    }
};

答案 1 :(得分:1)

您的代码正在从BoundedCounter转换为long,因此您需要定义从BoundedCounterlong的转换(强制转换)操作符:

class BoundedCounter {
private:
    long a_long_number;
public:
    operator long() const {
        return a_long_number;
    }
};

您定义的赋值运算符允许您为long类的实例分配BoundedCounter值,这与您尝试执行的操作相反。