Если у меня есть два класса:
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 класс содержит экземпляр рабочего класса. Когда создается экземпляр рабочего объекта, передается указатель на родительский класс. Позже вызывается функция doSomeWork(), которая должна получать значение от родителя, поэтому вызывает mp_parent-> privateFunction().
Каков наилучший способ достичь этого? - Я не хочу, чтобы privateFunction() публичная функция, если я могу ее избежать, но она не работает, поскольку она является частной: o
Есть ли другие варианты?
Возможно, вы можете использовать ключевое слово "friend":
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;}
}
Это классическое использование друзей:
class Top
{
private:
friend class Worker;
worker m_Worker;
int privateFunction() {return 1;}
}
Вы должны задуматься о том, чтобы подружиться и подумать, можете ли вы перепроектировать, чтобы избежать их, но иногда это имеет смысл.