我有以下情况:
class B
{
public:
void methodInB();
};
class C
{
public:
void methodInC();
};
class A
{
public:
void methodInA();
private:
B objB;
C objC;
};
void A::methodInA()
{
objB.methodInB();
}
int main()
{
A objA;
objA.methodInA();
return 0;
}
我希望能够从C::methodInC()
内调用B::methodInB()
,但我不确定它的方法是什么(不是没有搞乱全局变量)。
我的第一个想法是添加C* pC
指针作为B
的成员,然后从methodInB()
将其称为pC->methodInC
。这需要我在使用方法之前在A
内设置指针(可能在A
的构造函数中)。我的问题是如果我添加B
和D
对象,我可能需要从E
内调用其他对象,而我不想用指针填充类定义。
还有其他方法吗?对对象所属对象的隐式引用?有点像this
,但对于父母?所以我至少可以做parent->objC->methodInC()
?
答案 0 :(得分:4)
我认为最干净的方法是“注入依赖关系”,即将objC
传递给methodInB
,然后methodInC
会在该对象上调用void A::methodInA()
{
objB.methodInB(objC);
}
// ...
void B::methodInB(C &objC)
{
objC.methodInC();
}
:
{{1}}
答案 1 :(得分:2)
让每个B,C,D,E等类都有一个指向它们是子对象的A对象的指针。
class A;
class C;
class B
{
A* pA;
void MethodB();
};
...
void B::MethodB
{
(pa->CObject).MethodC();
}