Как вызвать метод в одном объекте из другого объекта в той же структуре - PullRequest
0 голосов
/ 23 июня 2011

У меня следующая ситуация:

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()?

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

Я думаю, что самым простым способом было бы «внедрить зависимость», то есть передать objC в methodInB, что затем вызвало бы methodInC для этого объекта:

void A::methodInA()
{
    objB.methodInB(objC);
}

// ...

void B::methodInB(C &objC)
{
    objC.methodInC();
}
2 голосов
/ 23 июня 2011

Пусть каждый класс B, C, D, E и т. Д. Имеет указатель на объект A, для которого они являются подобъектами.

class A;
class C;
class B
{
    A* pA;
    void MethodB();
};


...

void B::MethodB
{
   (pa->CObject).MethodC();
}    
...