在将Object声明为volatile时如何在C ++中重载运算符

时间:2017-12-14 19:50:10

标签: c++ class object operator-overloading volatile

我需要有关易失物体的建议。这是我的班级

class A
{
private:
volatile unsigned long count;
public:

A & operator = (unsigned long number) { count = number; return *this; }
};

我创建了一个声明为volatile

的类的实例
volatile A myClass;

当我使用“=”运算符来赋值时,我得到编译器错误

myClass = 5;

如何使用“this”指针来实现此功能?或者这甚至是问题?

1 个答案:

答案 0 :(得分:0)

第一个问题是你不能使用volatile指针,引用或实例来调用非volatile成员函数。这类似于const,如果您的对象为const,或者您的指针或引用属于const限定类型,则只能调用const成员函数。因此必须使您的会员成为volatile

第二个问题是,由于您的成员函数将成为volatilethis指针也将是volatile,这意味着*thisvolatile A & }。您将无法将*this绑定到A &,这是您的运算符的返回类型,因为volatile A &无法绑定到A &。同样,这就像const,您无法将const A &绑定到A &。解决方案是将运算符的返回类型更改为volatile A &

您的运营商应如下所示:

volatile A & operator= (unsigned long number) volatile
{
    count = number; 
    return *this; 
}