如何从同一结构中的另一个对象调用一个对象中的方法

时间:2011-06-22 20:27:04

标签: c++ methods class-design

我有以下情况:

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的构造函数中)。我的问题是如果我添加BD对象,我可能需要从E内调用其他对象,而我不想用指针填充类定义。

还有其他方法吗?对对象所属对象的隐式引用?有点像this,但对于父母?所以我至少可以做parent->objC->methodInC()

2 个答案:

答案 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();
}