您好我正在尝试重载类的赋值运算符以返回类Member(数据)。
class A{
public:
int32_t ToInt32() { return this->data; }
void SetData(int32_t data) { this->data=data; }
private:
int32_t data;
}
我想重载=运算符,以便我可以执行以下操作:
A *a = new A();
a->SetData(10);
int32_t Testint;
Testint = a;
现在a
应为10
。
我该怎么做?
答案 0 :(得分:1)
你不能这样做,因为a
是一个指针。您只能为自定义类型重载运算符(并且指针不是自定义类型)。
但是在这里使用指针无论如何都是无稽之谈。您可以进行以下工作:
A a = A{};
a.SetData(10);
int32_t Testint;
Testint = a;
为了做到这一点,你重载隐式转换为 - int32_t
运算符,而不是operator=
:
public:
operator int32_t() const { return data; }
关于代码风格的一句话:拥有setter通常是一个非常糟糕的主意 - 在构造函数中初始化你的类。并且在不初始化变量的情况下不要声明变量。所以你的代码实际上应该是这样的:
A a = A{10};
int32_t Testint = a;
......两行而不是四行。 A
的定义也变得更简单了:
class A {
public:
A(int32_t data) : data{data} {}
operator int32_t() const { return data; }
private:
int32_t data;
};
答案 1 :(得分:0)
您需要提供转换运算符:
class A{
...
operator int32_t() const
{
return this->data;
}
};
任何转换运算符都实现为:
operator DATATYPE()
{
return ...;
}
此类转换运算符的返回类型为DATATYPE
本身(因此在上面给出的代码中为int32_t
)。
由于此转换运算符不(不应)更改此实例的内容,因此应将其声明为const
。