c ++ вызывает приватную функцию в классе контейнера

Если у меня есть два класса:

class worker
{
Top *mp_parent;

worker(Top *parent) : mp_parent(parent) {};

int doSomeWork()
{
int i = mp_parent->privateFunction(); // This is the function I want to call
}
}

class Top
{
private:
worker m_Worker;

int privateFunction() {return 1;}

}

Где Top class содержит экземпляр рабочего класса. При создании экземпляра worker передается указатель на родительский класс.
Позже вызывается функция doSomeWork (), которая должна получить значение от родителя, поэтому она вызывает mp_parent-> privateFunction ().

Каков наилучший способ достичь этого? — Я действительно не хочу делать privateFunction () публичной функцией, если я могу ее избежать, но она не работает как есть, потому что она приватная: o

Есть ли другие варианты?

0

Решение

Может быть, вы можете использовать ключевое слово «друг»:

class worker
{
Top *mp_parent;

worker(Top *parent) : mp_parent(parent) {};

int doSomeWork()
{
int i = mp_parent->privateFunction(); // This is the function I want to call
}
}

class Top
{
friend class worker;
private:
worker m_Worker;

int privateFunction() {return 1;}

}
1

Другие решения

Это классическое использование друзей:

class Top
{
private:
friend class Worker;
worker m_Worker;

int privateFunction() {return 1;}

}

Вы должны задуматься о том, чтобы завести друзей, и подумайте, можете ли вы изменить дизайн, чтобы избежать их, но иногда это имеет смысл.

0

По вопросам рекламы [email protected]