【问题标题】:Overloading operator= does not work重载 operator= 不起作用
【发布时间】:2013-12-21 16:32:25
【问题描述】:

我想重载运算符 = 并且我有以下运算符函数

int IntegerClass::operator=(IntegerClass integer) {
  return  integer.number;
}

这应该是正确的?

在另一个类中,我想将对象私有成员(int)分配给另一个 int,即

int x = integerClass; 

但是当我编译时出现以下错误

error: cannot convert 'std::IntegerClass' to 'int' in initialization

我的运算符重载实现有什么问题,函数应该是什么样子?

【问题讨论】:

  • int x = integerClass 不调用任何运算符(它是初始化而不是赋值),尤其是IntegerClass::operator=。如果有的话,您可以尝试实现IntegerClass::operator int() 来支持隐式转换为int
  • 这是什么std::IntegerClass?标准库没有这样的类 AFAIK。您已将您的班级添加到std?这很糟糕。
  • @leemes .. 这可能是由于 Eclipse 自动生成了一个包含整个类的命名空间。即命名空间 std { class IntegerClass {} } ?
  • Eclipse 是您的 IDE;如果这是真的,你会看到代码。

标签: c++ operator-overloading


【解决方案1】:

您的运算符重载了一个 IntegerClass 对另一个 IntegerClass 的赋值,但您正试图将(实际上它是初始化)分配给一个内置的 int。您需要定义一个隐式转换运算符。

代码应该是这样的(抱歉我不记得确切的语法)

IntegerClass::operator int() {
  return number;
}

【讨论】:

  • 稍微扩展一下:int x = integerClass; 不是赋值语句。如果你做了int x; x = integerClass; 那么这将是一个任务。
  • 可能值得一提的是,在 std 命名空间中引入类是一个非常糟糕的主意(并且可能是未定义的行为 IIRC),但允许的情况除外。
  • 感谢它的工作!但我不明白为什么不必指定返回类型。如果它返回一个整数(数字),则声明应如下所示 int IntegerClass::operator int() .. 不应该吗?
  • @user2991252,operator int 的全部目的是返回一个 int。 int operator int 是多余的。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多