如何从另一个类中的一个类调用 setter 函数?
Posted
技术标签:
【中文标题】如何从另一个类中的一个类调用 setter 函数?【英文标题】:How to call a setter function from one class in another class? 【发布时间】:2020-10-25 17:02:21 【问题描述】:我正在尝试从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& a)
) 获取它,否则您正在修改复制的值。
哦,我知道我最近才学习指针,并没有意识到。 Tyvm 为您提供帮助。
【参考方案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& a)
。我不知道为什么这么多初学者会犯这个错误,我猜人们不希望传递参数来创建对象的副本,但确实如此。以上是关于如何从另一个类中的一个类调用 setter 函数?的主要内容,如果未能解决你的问题,请参考以下文章