Me doy cuenta de que hay muchas preguntas con respecto a las clases de amigos en C++. Mi pregunta, sin embargo, está ligada a un escenario específico. Dado el siguiente código, ¿es apropiado usar un amigo de esa manera?C++ friend classes
class Software
{
friend class SoftwareProducer;
SoftwareProducer* m_producer;
int m_key;
// Only producers can produce software
Software(SoftwareProducer* producer) : m_producer(producer) { }
public:
void buy()
{
m_key = m_producer->next_key();
}
};
class SoftwareProducer
{
friend class Software;
public:
Software* produce()
{
return new Software(this);
}
private:
// Only software from this producer can get a valid key for registration
int next_key()
{
return ...;
}
};
Gracias,
Saludos,
He hecho de Software un amigo de SoftwareProducer para tener acceso al método next_key que es privado. – Alex
¿No es al revés? Para permitir que el constructor privado del Software sea llamado desde SoftwareProducer, debe hacer que SoftwareProducer sea un amigo del Software, que como dije tiene sentido. Pero también hizo que Software sea un amigo de SoftwateProducer para que se pueda llamar al método next_key() que considero innecesario. – Naveen
¿De qué otra forma podría una instancia de software acceder al método next_key de su productor si es privada? – Alex