Il existe une différence substantielle entre rendre la classe publique et rendre son contenu public.
Si vous définissez votre classe dans un fichier d'inclusion (fichier .h), vous rendez votre classe publique. Tous les autres fichiers sources qui incluent ce fichier include connaissent cette classe et peuvent, par exemple, avoir un pointeur.
La seule façon de rendre une classe privée, c'est de mettre sa définition dans un fichier source (.cpp).
Même lorsque vous créez un cours public, vous n'avez pas nécessairement à rendre public le contenu de votre classe. L'exemple suivant est un cas extrême un:
class MyClass
{
private:
MyClass();
~MyClass();
void setValue(int i);
int getValue() const;
};
Si cette définition est placée dans un fichier Include, toutes les autres sources peut se référer à (un pointeur) cette classe, mais comme toutes les méthodes de la classe sont privées , aucune autre source ne peut le construire, le détruire, définir sa valeur ou obtenir sa valeur.
Vous faites le contenu d'un public de classe en mettant les méthodes de celui-ci dans la partie « public » de la définition de classe, comme ceci:
class MyClass
{
public:
MyClass();
~MyClass();
int getValue() const;
private:
void setValue(int i);
};
Maintenant tout le monde peut construire et détruire les instances de cette classe, et peut même avoir la valeur. La définition de la valeur n'est cependant pas publique, donc personne n'est capable de définir la valeur (sauf la classe elle-même).
Si vous voulez faire le public de classe seulement une autre classe de votre demande, mais pas à l'application complète, vous devez déclarer cette autre classe un ami, par exemple:
class SomeOtherClass;
class MyClass
{
friend SomeOtherClass;
public:
MyClass();
~MyClass();
int getValue() const;
private:
void setValue(int i);
};
Maintenant, SomeOtherClass peut accéder à toutes les méthodes privées de MyClass, donc il peut appeler setValue pour définir la valeur de MyClass. Toutes les autres classes sont encore limitées aux méthodes publiques.
Malheureusement, il n'y a aucun moyen en C++ de ne rendre publique qu'une partie de votre classe à un ensemble limité d'autres classes. Donc, si vous faites d'une autre classe une amie, elle peut accéder à toutes les méthodes privées. Par conséquent, limitez le nombre d'amis.
vous devriez prendre un bon livre C++. Il y a beaucoup de fils SO qui vous en conseilleront un. –