C++
Wpisz słowa kluczowe
Szukaj…
klasa
Wprowadza definicję typu klasy .
class foo { int x; public: int get_x(); void set_x(int new_x); };
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(); };
Wprowadza parametr typu do deklaracji szablonu .
template <class T> const T& min(const T& x, const T& y) { return b < a ? b : a; }
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 tutajclass
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(); }
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.
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 charakterpublic
a nieprivate
. - Nie można użyć
struct
do deklarowania parametru typu szablonu lub parametru szablonu szablonu; tylkoclass
może.
wyliczanie
Wprowadza definicję typu wyliczenia .
enum Direction { UP, LEFT, DOWN, RIGHT }; Direction d = UP;
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;
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
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
Wprowadza definicję typu unii .
// Example is from POSIX union sigval { int sival_int; void *sival_ptr; };
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 };