C ++: Déclarer une classe globale et y accéder depuis d’autres classes?

J’ai une classe qui doit être déclarée globalement depuis main () et accessible depuis d’autres classes déclarées dans le programme, comment puis-je le faire?

class A{ int i; int value(){ return i;} }; class B{ global A a; //or extern?? int calc(){ return a.value()+10; } } main(){ global A a; B b; cout<<b.calc(); } 

Vous ne voudrez probablement pas faire cela, mais si vous devez – dans le fichier qui contient main:

 #include "Ah" A a; int main() { ... } 

puis dans les fichiers devant accéder au global:

 #include "Ah" extern A a; 

Vous aurez besoin de mettre la déclaration de A dans le fichier d’en-tête Ah pour que cela fonctionne.

En C ++, déclarer une instance globale d’une classe est un non-non.

Vous devriez plutôt utiliser le modèle singleton, qui vous donne une seule instance de votre object accessible à partir de l’application entière.

Vous pouvez trouver beaucoup de littérature sur l’implémentation de singleton C ++, mais wikipedia est un bon sharepoint départ.

L’implémentation d’un modèle singleton thread-safe a déjà été discutée sur stackoverflow.