2010-03-05 4 views
1

Я просто наткнулся на следующий код:C++ определение встроенный класс и объект инициализации

#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; 
} 

я не видел вышеупомянутый метод definining переменную перед тем - определение класса осуществляется рядный с переменной определение. Это напоминает мне анонимные классы на Java. Что это называется, и это в стандарте C++?

Благодаря

Тарас

ответ

3

Это довольно стандартный для определения class (или struct, совершенно эквивалентный кроме того, что по умолчанию public вместо private) и объявить переменную такого типа (или указатель на такой переменная и т. д.) - это было ОК в C (с struct, но, как я уже упоминал, C++ class, сохранить для public vs private, это то же самое, что и struct), а C++ в основном поддерживает восходящую совместимость с (ISO-1989) C. Никогда не слышал, чтобы это называлось каким-то специальным именем.

+0

Нужно ли, чтобы класс был назван в этом случае (т. Е. Являются анонимными классами, разрешенными на C++)? И, поскольку он назван, вы можете создать другие объекты 'Foo'? – 2010-03-05 04:38:11

+1

... скоро будет совместима с ISO C99. Я должен добавить, однако, что это использование довольно редко встречается в идиоматическом C++, хотя оно и является законным. –

+3

@STingRaySC: нет, анонимные классы в порядке, и да, вы можете создавать другие. На самом деле вы можете создать два, даже если они анонимны: 'struct {...} foo1, foo2;'. – Potatoswatter

Смежные вопросы