gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:34:13 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com