C++ 覆盖 operator= 以调用 ToInt() 方法

标签 c++ operator-overloading assignment-operator

您好,我正在尝试重载类的赋值运算符以返回类成员(数据)。

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/

相关文章:

c++ - 在 Arduino IDE 中链接预建对象

c++ - 为什么在 C++ 中重载运算符时不需要范围解析 (::)?

java - java.utils.HashMap 中的 Node.equals 方法

c++ - 是什么让这个头文件让 VS2005 慢得像爬行一样? (智能感知无罪?)

c++ - 以下排序算法是否为O(n)?

mfc - 使用 CObject 派生类作为 CList 的类型参数时出现错误 C2248

c++ - 赋值运算符和初始化

javascript分配属性语句返回父对象

c++ - 关闭c++之前关闭应用程序

c++ - 只允许修改稀疏矩阵的非零元素