수색…
수업
클래스 유형의 정의를 소개합니다.
class foo { int x; public: int get_x(); void set_x(int new_x); };
다음 이름이 클래스 유형의 이름임을 지정 하는 정교한 형식 지정자를 도입합니다. 클래스 이름이 이미 선언 된 경우 다른 이름으로 숨겨진 경우에도 클래스 이름을 찾을 수 있습니다. 클래스 이름이 이미 선언되지 않은 경우에는 전달 선언됩니다.
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(); };
템플릿 선언에 형식 매개 변수를 도입합니다.
template <class T> const T& min(const T& x, const T& y) { return b < a ? b : a; }
템플리트 템플리트 매개 변수 의 선언에서 키워드
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(); }
센스 2와 센스 3는 동일한 선언에 결합 될 수 있습니다. 예 :
template <class T> class foo { }; foo<class bar> x; // <- bar does not have to have previously appeared.
구조체
다음과 같은 점을 제외하고는 class
와 호환 가능 :
- 클래스 유형이 키워드
struct
사용하여 정의 된 경우 기본 및 멤버의 기본 액세스 가능성은private
아닌public
입니다. -
struct
는 템플릿 형식 매개 변수 또는 템플릿 템플릿 매개 변수를 선언하는 데 사용할 수 없습니다. 오직class
만 할 수 있습니다.
열거 형
열거 형 의 정의를 소개합니다.
enum Direction { UP, LEFT, DOWN, RIGHT }; Direction d = UP;
C ++ 11에서는 enum
선택적으로 class
또는 struct
수 있으며 범위 가 지정된 enum 을 정의 할 수 있습니다. 또한 범위가 지정되지 않은 열거 형과 열거되지 않은 열거 형은 모두 다음과 같이 명시 적으로 지정된 기본 형식을 가질 수 있습니다 : T
열거 형 이름 다음에 T
는 정수 유형을 나타냅니다.
enum class Format : char {
TEXT,
PDF,
OTHER
};
Format f = Format::TEXT;
enum Language : int {
ENGLISH,
FRENCH,
OTHER
};
일반 enum
의 enum
자는 enum
가 정의 된 범위에있는 것으로 여전히 간주되지만 범위 연산자로 시작될 수 있습니다.
Language l1, l2;
l1 = ENGLISH;
l2 = Language::OTHER;
다음 이름이 이전에 선언 된 열거 형의 이름임을 지정 하는 정교한 형식 지정자를 도입합니다. 정교한 형식 지정자는 열거 형을 전달 선언하는 데 사용할 수 없습니다. 열거 형은 다른 이름으로 숨겨진 경우에도 이러한 방식으로 명명 될 수 있습니다.
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
enum을 정의하지 않고 선언 하는 불투명 한 enum 선언을 소개합니다. 이전에 선언 된 enum을 재 선언하거나 이전에 선언되지 않은 enum을 forward-declare 할 수 있습니다.
범위가 지정된 것으로 선언 된 열거 형은 나중에 범위가 지정되지 않은 것으로 선언 될 수 없으며 그 반대의 경우도 마찬가지입니다. 열거 형의 모든 선언은 기본 유형에서 일치해야합니다.
범위가 지정되지 않은 열거 형을 전방 선언 할 때 열거 형 값이 알려질 때까지 유추 할 수 없으므로 기본 형식을 명시 적으로 지정해야합니다.
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
노동 조합
유니온 타입의 정의를 소개합니다.
// Example is from POSIX union sigval { int sival_int; void *sival_ptr; };
다음 이름이 공용 형식의 이름임을 지정 하는 정교한 형식 지정자를 도입합니다. 공용체 이름이 이미 선언 되었다면, 다른 이름으로 숨겨져 있어도 발견 될 수 있습니다. 공용체 이름이 이미 선언되어 있지 않은 경우, 전방 선언됩니다.
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 };