Поиск…


учебный класс

  1. Вводит определение типа класса .

    class foo {
        int x;
      public:
        int get_x();
        void set_x(int new_x);
    };
    
  2. Представляет специфицированный спецификатор типа, который указывает, что следующее имя - это имя типа класса. Если имя класса уже объявлено, оно может быть найдено, даже если оно скрыто под другим именем. Если имя класса еще не было объявлено, оно объявляется вперед.

    class foo; // elaborated type specifier -> forward declaration
    class bar {
      public:
        bar(foo& f);
    };
    void baz();
    class baz; // another elaborated type specifer; another forward declaration
               // note: the class has the same name as the function void baz()
    class foo {
        bar b;
        friend class baz; // elaborated type specifier refers to the class,
                          // not the function of the same name
      public:
        foo();
    };
    
  3. Представляет параметр типа в объявлении шаблона .

    template <class T>
    const T& min(const T& x, const T& y) {
        return b < a ? b : a;
    }
    
  4. В объявлении параметра шаблона шаблона class ключевого слова предшествует имени параметра. Поскольку аргумент для параметра шаблона шаблона может быть только шаблоном класса, использование class здесь избыточно. Однако это требует грамматика C ++.

    template <template <class T> class U>
    //                           ^^^^^ "class" used in this sense here;
    //                                 U is a template template parameter
    void f() {
        U<int>::do_it();
        U<double>::do_it();
    }
    
  5. Обратите внимание, что смысл 2 и смысл 3 могут быть объединены в одну и ту же декларацию. Например:

    template <class T>
    class foo {
    };
    
    foo<class bar> x; // <- bar does not have to have previously appeared.
    
C ++ 11
  1. В объявлении или определении перечисления объявляет перечисление как облачное перечисление .

    enum class Format {
        TEXT,
        PDF,
        OTHER,
    };
    Format f = F::TEXT;
    

структура

Взаимозаменяемый с class , за исключением следующих отличий:

  • Если тип класса определяется с помощью ключевого слова struct , тогда стандартная доступность баз и членов является public а не private .
  • struct не может использоваться для объявления параметра шаблона шаблона или шаблона шаблона; только class может.

перечисление

  1. Вводит определение типа перечисления .

    enum Direction {
        UP,
        LEFT,
        DOWN,
        RIGHT
    };
    Direction d = UP;
    
C ++ 11

В C ++ 11 enum может необязательно сопровождаться class или struct для определения области с перечислением . Кроме того, как скопированные, так и незанятые перечисления могут иметь свой базовый тип, явно указанный : T после имени перечисления, где T относится к целочисленному типу.

   enum class Format : char {
       TEXT,
       PDF,
       OTHER
   };
   Format f = Format::TEXT;

   enum Language : int {
       ENGLISH,
       FRENCH,
       OTHER
   };

Перечислителям в нормальном enum s также может предшествовать оператор области видимости, хотя они все еще считаются включенными в область, в которой было указано enum .

   Language l1, l2;

   l1 = ENGLISH;
   l2 = Language::OTHER;
  1. Представляет специфицированный спецификатор типа, который указывает, что следующее имя - это имя ранее объявленного типа перечисления. (Спецификатор специфицированного типа нельзя использовать для форварда-объявления типа перечисления.) Перечисление можно назвать таким образом, даже если оно скрыто под другим именем.

    enum Foo { FOO };
    void Foo() {}
    Foo foo = FOO;      // ill-formed; Foo refers to the function
    enum Foo foo = FOO; // ok; Foo refers to the enum type
    
C ++ 11
  1. Вводит непрозрачную декламацию enum, которая объявляет перечисление без его определения. Он может либо обновить ранее объявленное перечисление, либо переслать-объявить перечисление, которое ранее не было объявлено.

    Перечисление, объявленное сначала как область действия, впоследствии не может быть объявлено как незарегистрированное, или наоборот. Все объявления перечисления должны согласовываться в базовом типе.

    Когда forward-декларирование неперечисленного перечисления, базовый тип должен быть явно указан, поскольку он не может быть выведен до тех пор, пока не будут известны значения перечислений.

    enum class Format; // underlying type is implicitly int
    void f(Format f);
    enum class Format {
        TEXT,
        PDF,
        OTHER,
    };
    
    enum Direction;    // ill-formed; must specify underlying type
    

союз

  1. Вводит определение типа объединения .

    // Example is from POSIX
    union sigval {
        int     sival_int;
        void   *sival_ptr;
    };
    
  2. Представляет специфицированный спецификатор типа, который указывает, что следующее имя - это имя типа объединения. Если имя союза уже объявлено, оно может быть найдено, даже если оно скрыто под другим именем. Если имя профсоюза еще не объявлено, оно объявляется вперед.

    union foo; // elaborated type specifier -> forward declaration
    class bar {
      public:
        bar(foo& f);
    };
    void baz();
    union baz; // another elaborated type specifer; another forward declaration
               // note: the class has the same name as the function void baz()
    union foo {
        long l;
        union baz* b; // elaborated type specifier refers to the class,
                      // not the function of the same name
    };
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow