2010-03-05 9 views
1

Je viens dans le code suivant:C++ définition de classe en ligne et initialisation objet

#include <iostream> 

static class Foo 
{ 
public: 
    Foo() 
    { 
     std::cout << "HELLO" << std::endl; 
    } 

    void foo() 
    { 
     std::cout << "in foo" << std::endl; 
    } 

} 
    blah; 

int main() 
{ 
    std::cout << "exiting" << std::endl; 
    blah.foo(); 
    return 0; 
} 

Je ne l'ai pas vu la méthode ci-dessus definining une variable avant - la définition de classe se fait en ligne avec la variable définition. Cela me rappelle les cours anonymes en Java. Comment s'appelle-t-il, et est-ce dans la norme C++?

Merci

Taras

Répondre

3

Il est tout à fait standard pour définir un class (ou struct, parfaitement équivalent, sauf que la valeur par défaut est public au lieu de private) et déclarer une variable de son type (ou pointeur vers un tel variables, etc.) - il était OK en C (avec struct, mais comme je l'ai déjà mentionné C++ 's class, sauf pour le public vs privé, est la même chose que struct) et C++ maintient la plupart du temps vers le haut compatibilité avec (ISO-1989) C. Jamais entendu l'appeler par un nom spécial.

+0

Est-il nécessaire pour que la classe soit nommé dans ce cas (par exemple, sont des classes anonymes autorisés en C++)? Et, comme il est nommé, pouvez-vous créer d'autres objets 'Foo'? –

+1

... bientôt la compatibilité avec ISO C99. Je devrais ajouter, cependant, que cet usage est assez rare dans le C++ idiomatique, même si c'est légal. –

+3

@STingRaySC: non, les classes anonymes sont très bien, et oui, vous pouvez en créer d'autres. En fait vous pouvez en créer deux même s'il est anonyme: 'struct {...} foo1, foo2;'. – Potatoswatter