2016-09-28 1 views
-5

Supposons que nous ayons deux classes Foo et Bar. Nous pouvons déclarer la classe Foo et utiliser ses méthodes comme suit:Quelle est la différence entre déclarer une classe et déclarer une variable de classe?

#include"foo.h" 

Foo foo 

class Bar{ 
    Bar(){ 
     foo.method1(); 
    } 
} 

Et nous avons la déclaration en avant, ce qui signifie de déclarer la classe Foo comme suit:

#include"foo.h" 

class Foo 

class Bar{ 
    Bar(){ 
    } 
} 

Quelles sont les principales différences entre les deux déclarations, et lorsque la déclaration prospective est préférée à la déclaration normale?

+0

Lien utile: https://www.quora.com/Quand-exactement-est-ce-difference-entre-la-declaration-du-class-et-une-définition-de-classe –

+0

dans votre deuxième exemple 'Foo' n'est jamais utilisé, donc je ne comprends pas votre question – bolov

+1

Possible duplicate de [C++ - Forward declaration] (http://stackoverflow.com/questions/4757565/c-forward-declaration) – dkg

Répondre

1

En second cas, vous n'avez pas besoin

#include"foo.h" 

Dans la déclaration avant que vous venez de dire compilateur « Il y a la classe Foo quelque part. Mais je ne sais pas comment l'air ». Ainsi, le compilateur peut les renvoyer mais ne peut pas les utiliser;

class Foo; //Forward declaration. 

Foo* foo; // ok. Just pointer. 
Foo foo;// error. Compiler can't instantiate object. 

et

#include "foo.h" 

Foo* foo; // ok. Just pointer. 
Foo foo;// ok. Compiler can instantiate object. 

Ainsi, dans certains cas, déclaration anticipée peut remplacer l'inclusion d'un fichier d'en-tête.