将对象声明为 volatile 时如何在 C++ 中重载运算符
How to overload operators in C++ when declaring an Object as volatile
我需要有关易变对象的建议。这是我的 class
class A
{
private:
volatile unsigned long count;
public:
A & operator = (unsigned long number) { count = number; return *this; }
};
我创建了一个声明为 volatile
的 class 实例
volatile A myClass;
当我使用“=”运算符赋值时出现编译错误
myClass = 5;
如何转换 "this" 指针才能使其工作?或者这甚至是问题所在?
第一个问题是您不能使用volatile
指针、引用或实例调用非volatile
成员函数。这类似于 const
,如果您的对象是 const
或者您的指针或引用是 const
合格类型,您只能调用 const
成员函数。因此必须必须使您的成员函数 volatile
.
第二个问题是,由于你的成员函数将成为volatile
,this
指针也将是volatile
,这意味着*this
是一个volatile A &
。您将无法将 *this
绑定到 A &
,这是您的运算符的 return 类型,因为 volatile A &
无法绑定到 A &
。同样,这就像无法将 const A &
绑定到 A &
的 const
。解决方案是将运算符的 return 类型更改为 volatile A &
.
您的操作员应如下所示:
volatile A & operator= (unsigned long number) volatile
{
count = number;
return *this;
}
我需要有关易变对象的建议。这是我的 class
class A
{
private:
volatile unsigned long count;
public:
A & operator = (unsigned long number) { count = number; return *this; }
};
我创建了一个声明为 volatile
的 class 实例volatile A myClass;
当我使用“=”运算符赋值时出现编译错误
myClass = 5;
如何转换 "this" 指针才能使其工作?或者这甚至是问题所在?
第一个问题是您不能使用volatile
指针、引用或实例调用非volatile
成员函数。这类似于 const
,如果您的对象是 const
或者您的指针或引用是 const
合格类型,您只能调用 const
成员函数。因此必须必须使您的成员函数 volatile
.
第二个问题是,由于你的成员函数将成为volatile
,this
指针也将是volatile
,这意味着*this
是一个volatile A &
。您将无法将 *this
绑定到 A &
,这是您的运算符的 return 类型,因为 volatile A &
无法绑定到 A &
。同样,这就像无法将 const A &
绑定到 A &
的 const
。解决方案是将运算符的 return 类型更改为 volatile A &
.
您的操作员应如下所示:
volatile A & operator= (unsigned long number) volatile
{
count = number;
return *this;
}