Szukaj…


klasa

  1. Wprowadza definicję typu klasy .

    class foo {
        int x;
      public:
        int get_x();
        void set_x(int new_x);
    };
    
  2. Przedstawia rozwinięty specyfikator typu, który określa, że następująca nazwa jest nazwą typu klasy. Jeśli nazwa klasy została już zadeklarowana, można ją znaleźć, nawet jeśli jest ukryta pod inną nazwą. Jeśli nazwa klasy nie została jeszcze zadeklarowana, jest deklarowana w przód.

    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. Wprowadza parametr typu do deklaracji szablonu .

    template <class T>
    const T& min(const T& x, const T& y) {
        return b < a ? b : a;
    }
    
  4. W deklaracji parametru szablonu szablonu class słowa kluczowego poprzedza nazwę parametru. Ponieważ argumentem parametru szablonu szablonu może być tylko szablon klasy, użycie tutaj class jest zbędne. Jednak wymaga tego gramatyka 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. Zauważ, że sens 2 i sens 3 mogą być połączone w tej samej deklaracji. Na przykład:

    template <class T>
    class foo {
    };
    
    foo<class bar> x; // <- bar does not have to have previously appeared.
    
C ++ 11
  1. W deklaracji lub definicji wyliczenia deklaruje wyliczenie jako wyliczenie o zasięgu .

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

struct

Wymienne z class , z wyjątkiem następujących różnic:

  • Jeśli typ klasy jest zdefiniowany za pomocą słowa kluczowego struct , wówczas domyślna dostępność baz i elementów ma charakter public a nie private .
  • Nie można użyć struct do deklarowania parametru typu szablonu lub parametru szablonu szablonu; tylko class może.

wyliczanie

  1. Wprowadza definicję typu wyliczenia .

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

W C ++ 11 po enum może opcjonalnie następować class lub struct aby zdefiniować enum o zasięgu . Co więcej, zarówno wyliczenia o zasięgu, jak i nieoznaczonym mogą mieć swój typ bazowy wyraźnie określony przez : T po nazwie wyliczenia, gdzie T odnosi się do typu liczby całkowitej.

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

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

Liczniki w normalnym enum mogą być również poprzedzone operatorem zakresu, chociaż nadal uważa się, że są w zakresie, w którym enum zostało zdefiniowane.

   Language l1, l2;

   l1 = ENGLISH;
   l2 = Language::OTHER;
  1. Wprowadza opracowany specyfikator typu, który określa, że następująca nazwa jest nazwą wcześniej zadeklarowanego typu wyliczeniowego. (Opracowanego specyfikatora typu nie można użyć do zadeklarowania w przód typu enum.) Enum można nazwać w ten sposób, nawet jeśli jest ukryty pod inną nazwą.

    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. Wprowadza nieprzezroczystą deklarację wyliczenia, która deklaruje wyliczenie bez jego definiowania. Może albo przywrócić poprzednio zadeklarowane wyliczenie, albo zadeklarować dalej wyliczenie, które nie zostało wcześniej zadeklarowane.

    Wyliczenie najpierw zadeklarowane jako zakres nie może być później zadeklarowane jako nieokreślone lub odwrotnie. Wszystkie deklaracje wyliczenia muszą być zgodne z typem bazowym.

    Przy deklarowaniu do przodu wyliczenia nieskanowanego typ bazowy musi być wyraźnie określony, ponieważ nie można go wywnioskować, dopóki nie zostaną znane wartości modułów wyliczających.

    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
    

unia

  1. Wprowadza definicję typu unii .

    // Example is from POSIX
    union sigval {
        int     sival_int;
        void   *sival_ptr;
    };
    
  2. Przedstawia rozwinięty specyfikator typu, który określa, że następująca nazwa jest nazwą typu unii. Jeśli nazwa związku została już zadeklarowana, można ją znaleźć, nawet jeśli jest ukryta pod inną nazwą. Jeśli nazwa związku nie została jeszcze zadeklarowana, jest deklarowana w przód.

    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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow