수색…


수업

  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의 선언 또는 정의에서 enum을 범위지정된 enum 으로 선언합니다.

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

구조체

다음과 같은 점을 제외하고는 class 와 호환 가능 :

  • 클래스 유형이 키워드 struct 사용하여 정의 된 경우 기본 및 멤버의 기본 액세스 가능성은 private 아닌 public 입니다.
  • struct 는 템플릿 형식 매개 변수 또는 템플릿 템플릿 매개 변수를 선언하는 데 사용할 수 없습니다. 오직 class 만 할 수 있습니다.

열거 형

  1. 열거 형 의 정의를 소개합니다.

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

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

일반 enumenum 자는 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을 정의하지 않고 선언 하는 불투명 한 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
    

노동 조합

  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