您好,我正在尝试重载类的赋值运算符以返回类成员(数据)。
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
。
我该怎么做?
最佳答案
你不能那样做,因为 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;
};
关于C++ 覆盖 operator= 以调用 ToInt() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27018109/