C ++에서 "class :"는 무엇을 의미합니까?


78

전에 본 적이 없습니다. ":: sample"의 오타라고 생각했지만 실제로 컴파일되는 것을 보았을 때 매우 혼란 스러웠습니다. 누구든지 제발 알아낼 수 있습니까? 나는 그것이 goto레이블 이라고 생각하지 않습니다 .

void f() {
  class: sample {
    // there were some members declared here
  } x;
}

5
익명 클래스 (샘플에서 상 속됨) 인스턴스 x처럼 보입니다. 전에는 본 적이 없습니다. C ++ 0x일까요?
ssmir

1
그냥 추측 : 이것은 이름이없는 클래스에서 파생 될 수 sample있습니까?
davka 2011 년

13
goto레이블 이 아니에요 ? 수정, goto의 최고 class!
CB Bailey

4
이게 당신 인 줄도 몰랐어요. Pfft.
궤도에서 가벼운 경주

@Johannes 아직하지 않았다면 이 코드 검토 제안을 확인하십시오 . 이 사이트는 귀하의 C ++ 능력을 확실히 활용할 수 있습니다.
greatwolf

답변:


81

이름이 지정되지 않은 클래스이며 콜론은 sample. 처럼 봐

class Foo : private sample
{
    // ...
};

Foo x;

9
와, 흥미 롭군요. 당신이 옳은 것 같습니다. 범위에 "샘플"클래스가 있고 클래스 구성원이 기본 클래스에 액세스합니다. 이제 알겠습니다.
Johannes Schaub-litb 2011 년

2
@Johannes : 명명되지 않은 클래스는 기본 생성 자나 소멸자가 아닌 생성 자나 소멸자를 가질 수없고 (로컬 클래스이기 때문에) 템플릿으로 사용할 수 없기 때문에 이것은 매우 제한적인 접근 방식입니다. 이 구조의 용도가 무엇인지 궁금합니다. 로컬 클래스에 대해 내가 아는 유일한 사용 사례는 "type erasure idiom"입니다 (즉 sample*,를 반환 하지만 sample여기서는 액세스 할 수없는 기본 클래스 임).
Alexandre C.

@Alexandre 실제 코드에서는 발생하지 않았습니다. 내 놀이터 파일 중 하나였습니다.
Johannes Schaub-litb

1
명명되지 않은 클래스 인스턴스가 아닙니다. 이름없는 클래스입니다.
궤도

21

나는 그것이 에서 파생 되는 명명되지 않은 클래스를 정의 하고 있다고 생각합니다 sample. 그리고 x이름이 지정되지 않은 클래스의 변수입니다.

struct sample{ int i;};

sample f() 
{
  struct : sample 
  {
    // there were some members declared here
  } x;
  x.i = 10;
  return x;
}
int main() 
{
        sample s = f();
        cout << s.i << endl;
        return 0;
}

ideone의 샘플 코드 : http://www.ideone.com/6Mj8x

PS : 접근성 classstruct위해로 변경 했습니다 !


2

이름없는 클래스입니다.

예를 들어 C ++ 11 이전의 로컬 함수를 대체하는 데 사용할 수 있습니다.

int main() {
    struct {
        int operator() (int i) const {                 
            return 42;
        }
    } nice;

    nice(0xbeef);
}

콜론 다음에 오는 것은 sample단순히 기본 상속 sample사용하여 파생 된다는 의미 입니다. (구조체 : 공용, 클래스 : 개인용)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.