Hay una diferencia sustancial entre hacer pública la clase y hacer público su contenido.
Si define su clase en un archivo de inclusión (archivo .h), entonces hará que su clase sea pública. Todos los demás archivos fuente que incluyen este archivo de inclusión sabrán sobre esta clase, y pueden, p. tener un puntero a eso.
La única manera de hacer que una clase sea privada, es poner su definición en un archivo fuente (.cpp).
Incluso cuando haces una clase pública, no necesariamente tienes que hacer público el contenido de tu clase. El siguiente ejemplo es un extremo una:
class MyClass
{
private:
MyClass();
~MyClass();
void setValue(int i);
int getValue() const;
};
Si esta definición se pone en un archivo de inclusión, todas las otras fuentes se puede referir a (tener un puntero a) de esta clase, pero como todos los métodos de la clase son privadas , ninguna otra fuente puede construirlo, destruirlo, establecer su valor o obtener su valor.
Se crea el contenido de un público de clase poniendo métodos de él en la parte 'pública' de la definición de clase, así:
class MyClass
{
public:
MyClass();
~MyClass();
int getValue() const;
private:
void setValue(int i);
};
Ahora todo el mundo puede construir y destruir instancias de esta clase, y incluso puede obtener el valor. Sin embargo, establecer el valor no es público, por lo que nadie puede establecer el valor (excepto la clase misma).
Si desea hacer pública la clase sólo a alguna otra clase de su aplicación, pero no a la aplicación completa, debe declarar que otra clase de un amigo, por ejemplo:
class SomeOtherClass;
class MyClass
{
friend SomeOtherClass;
public:
MyClass();
~MyClass();
int getValue() const;
private:
void setValue(int i);
};
Ahora, SomeOtherClass puede acceda a todos los métodos privados de MyClass, por lo que puede llamar a setValue para establecer el valor de MyClass. Todas las otras clases todavía están limitadas a los métodos públicos.
Desafortunadamente, no hay forma en que C++ haga pública solo una parte de su clase a un conjunto limitado de otras clases. Entonces, si haces que otra clase sea un amigo, puede acceder a todos los métodos privados. Por lo tanto, limite el número de amigos.
deberías tomar un buen libro de C++. Hay muchos hilos SO que te aconsejarán. –