我有一个问题,我几乎可以肯定我可以通过重构我必须消除问题的代码找到解决方案,但我想知道是否有办法用我现在拥有的相同结果。
假设我们有A类:
class A
{
public:
int thing;
void dostuff();
std::list<B> mList;
}
void A::doStuff()
{
for(auto x : mList)
x.doMoreStuff();
}
然后是B级。
class B
{
void doMoreStuff();
}
是否有可能以任何方式让B&#39的doMoreStuff改变&#39; int事物&#39; A类的变量没有将类A的实例传递给B或类似的复杂方法?
答案 0 :(得分:2)
如果您只想更改某个实例的值,则必须参考。
你能做的就是使用B
中方法的返回值class A
{
int thing;
B b;
void dostuff() {
thing += b.doMoreStuff();
};
}
class B
{
int doMoreStuff() {
return 1;
};
}
或者您可以将int thing
或void doMoreStuff()
设为static
,以便可以从类内存而不是实例内存中访问它,如下所示:
class A
{
static int thing;
void dostuff() {
B.DoMoreStuff();
};
}
class B
{
static void doMoreStuff() {
A.thing += 2;
};
}
答案 1 :(得分:1)
是的,您只需传递 int of A 的地址即可:
B.doMoreThing(&myInt);
并且doMoreThing的定义将是:doMoreThing(int * myInt)
并且在修改函数内部的int值时,例如*myInt+=5
,*
对于访问变量很重要。
答案 2 :(得分:0)
如果没有引用或指向它的东西,你将无法写入。也就是说,事情是私人的,所以你需要一个二传手。或者你可以让B成为A的朋友,或者给B指向成员的指针。