【问题标题】:How to call a setter function from one class in another class?如何从另一个类中的一个类调用 setter 函数?
【发布时间】:2023-04-08 05:55:01
【问题描述】:

我正在尝试从Class A 中的class B 调用setter 函数,但我无法执行此操作,我不知道为什么。 (我是 C++ 的初学者,我需要这样做,因为它与我的任务有关。)

这是我的代码:

#include <iostream>

using namespace std;

class A{
private:
  int i = 2;
public:
  int getInt(){
    return i;
  };
  void setI(int a){
    i = a;
  }
};

class B{
private:
  int c = 3;
public:
  void setAI(A a){
    a.setI(c);
  }
};

int main() {
  A a;
  B b;

  cout << a.getInt() << endl;
  b.setAI(a);
  cout << a.getInt() << endl;
  a.setI(5);
  cout << a.getInt() << endl;
}

我得到的输出是:

2
2
5

当我想得到:

2
3
5

【问题讨论】:

  • void setAI(A a) 中,您正在复制 A。您需要通过引用 (void setAI(A&amp; a)) 获取它,否则您正在修改复制的值。
  • 哦,我知道我最近才学习指针,并没有意识到。 Tyvm 为您提供帮助。

标签: c++ function class setter


【解决方案1】:

我刚刚对setAI() 函数进行了一些更改。我通过地址而不是值传递了对象。我不确定是什么导致了问题(因为我也是初学者)但指针已经解决了问题。

#include <iostream>

using namespace std;

class A{
private:
  int i = 2;
public:
  int getInt(){
    return i;
  };
  void setI(int a){
    i = a;
  }
};

class B{
private:
  int c = 3;
public:
  void setAI(A *a){
      a->setI(c);
  }
};

int main() {
  A a;
  B b;

  cout << a.getInt() << endl;
  b.setAI(&a);
  cout << a.getInt() << endl;
  a.setI(5);
  cout << a.getInt() << endl;
}

【讨论】:

  • 这个问题是一个很常见的初学者误解。在这段代码中setAI(A a)a 是一个copy,你的setter 正在工作,但是它正在改变一个copy 而不是你真正想要改变的对象。通过更改代码以使用指针,您可以避免复制任何对象。您也可以使用参考,例如 setAI(A&amp; a)。我不知道为什么这么多初学者会犯这个错误,我猜人们不希望传递参数来创建对象的副本,但确实如此。
猜你喜欢
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多