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

时间:2014-11-19 13:31:02

标签: c++ operator-overloading assignment-operator

您好我正在尝试重载类的赋值运算符以返回类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

我该怎么做?

2 个答案:

答案 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