【问题标题】:Addition of two numbers using constructor with only one parameter使用只有一个参数的构造函数将两个数字相加
【发布时间】:2020-10-27 09:59:06
【问题描述】:

这里我需要添加两个数字,但是我的构造函数只有一个参数。它应该有一个参数。使用 addFunc 我需要添加两个不同的数字。

int result = 0;
class Num{
  private:
  int a;
  public:
  Num(int a) {
    a = a;
  }
  int getA(){
    return a;
  }
  void setA(int a){
    a = a;
  }
    int addFunc() {
      return result += getA();
    }
  }
};

这是我的“主要”函数,我需要输出两个数字的总和,这应该保存到“结果”变量中。

问题是我得到的不是真正的结果 5+6=11 ->

【问题讨论】:

  • a = a; 没有做你认为的事情(而且真的很混乱)
  • this->a = a;Num(int a) : a(a) {} 或重命名参数以避免混淆。
  • 上面指出了错误。但即使有建议的修复,这段代码也毫无意义。您不认为将两个数字相加应该更容易吗?我强烈怀疑你误解了你被要求做的事情。
  • 有可能在main 中你应该评估总和,写成int f = num.addFunc(num1); 并相应地更改函数签名。
  • Bob__ 的建议比你写的更有意义。使用该代码addFunc 可以访问它应该加在一起的两个数字(显然它需要这样做)。这样你就可以消除全局 result 变量,我确定你不应该使用它。

标签: c++ oop constructor


【解决方案1】:

扩展 Bob__ 的建议,您的代码似乎应该看起来有点像这样

class Num {
private:
    int a;
public:
    Num(int a) {
        this->a = a;
    }
    int getA() {
        return a;
    }
    void setA(int a) {
        this->a = a;
    }
    int addFunc(Num other) {
        return a + other.a;
    }
};

int main()
{
    Num num(5);
    Num num2(6);
    cout << num.addFunc(num2);
}

如您所见,它更合乎逻辑,更简单,并且不需要使用全局变量将两个数字相加。

【讨论】:

  • 也许在构造函数中使用初始化列表。它对 OPs 代码的更改并不比现在多多少,而且您在 setA 中仍然有一个 this-&gt;a = a 的示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多