Pammer 发表于 2020-4-10 14:16

C++当前运算符“=”未重载

本帖最后由 Pammer 于 2020-4-10 15:03 编辑

class a
{
public:
      a(const int& arg);
      a& operator=(const a& arg);
      int value = 0;
private:
protected:
};

a& a::operator=(const a& arg)
{
      this->value = arg.value;
      return *this;
}

a::a(const int& arg)
{
      this->value = arg;
}

int main()
{
      a i = 0;
      a j = i;
}
这儿为什么会显示当前运算符“=”未重载?

我的爱是你 发表于 2020-4-10 14:37

本帖最后由 我的爱是你 于 2020-4-10 14:39 编辑

重载没问题。
vs2019正常运行,应该是你编译器问题。

Pammer 发表于 2020-4-10 14:44

本帖最后由 Pammer 于 2020-4-10 14:45 编辑

我的爱是你 发表于 2020-4-10 14:37
重载没问题。
vs2019正常运行,应该是你编译器问题。
对着i=99中间的=右键,转到定义(我一直单步,单步不到operator=里)

我的爱是你 发表于 2020-4-10 14:48

Pammer 发表于 2020-4-10 14:44
对着i=99中间的=右键,转到定义(我一直单步,单步不到operator=里)


为啥要对a i = 99 右键呢,你写的重载 i= 99 根本没有使用。
j = i 才使用了你的重载,a i =99 和 a j =i 都属于构造根本不会使用你的重载。

Pammer 发表于 2020-4-10 14:52

本帖最后由 Pammer 于 2020-4-10 14:54 编辑

我的爱是你 发表于 2020-4-10 14:48
为啥要对a i = 99 右键呢,你写的重载 i= 99 根本没有使用。
j = i 才使用了你的重载,a i =99 和 a...
懂了,但是怎样用 a j=i使用operator=?

我的爱是你 发表于 2020-4-10 14:55

本帖最后由 我的爱是你 于 2020-4-10 15:14 编辑

好吧你所问的重载构造时的 = 号 难住我了,这相当于问我 1+1; 右键+ 号转到定义为啥没有重载一样。
我只能进行推测 其已在编译器内部早已定义,或者 如果能找到 class 微软源代码的话我或许可以对其回答。

Pammer 发表于 2020-4-10 15:02

我的爱是你 发表于 2020-4-10 14:55
预留文章

劳您费心了,我懂了,得重载折构函数

我的爱是你 发表于 2020-4-10 15:15

Pammer 发表于 2020-4-10 15:02
劳您费心了,我懂了,得重载折构函数

析构函数无法重载但可以多态。

Pammer 发表于 2020-4-10 15:21

我的爱是你 发表于 2020-4-10 15:15
析构函数无法重载但可以多态。

打错了,是构造函数(构造、析构分不清{:301_1004:})
页: [1]
查看完整版本: C++当前运算符“=”未重载