2010-12-13 3 views
1

structclass 사이에 C++의 차이점이 거의 없음을 알고 있습니다. 나는 또한 차이 (들)의 몇 가지 이유 (들)을 이해합니다. 이와 같은, 구조체의기본 클래스의 "기본"액세스 지정자 차이점에 대한 이유

  • 회원은 기본에 의해 공개 이다; 클래스의 멤버는 기본적으로 개인입니다. 구조체의 멤버가 public으로 기본 설정되어있는 이유는 이 C-struct과 호환되도록하는 것입니다. 그리고 클래스의 멤버가 인 이유는 기본적으로입니다. 데이터 캡슐화의 개념을 도입하는 것입니다 (즉, 객체 지향 원칙/기법/등을 시행함). 이해가 안 무엇

는 $ 11.2이/2 [class.access.base] 기본 클래스에 대한 액세스 지정자의 부재에서

이 공개가 가정 표준을 인용, 이것이다 파생 클래스가 struct 으로 선언되고 클래스가 선언되면 private이 가정됩니다.

왜곡과 반 균일도의 근거는 무엇입니까? 왜 이러한 차이가 필요합니까? 표준에서

예, 여기서 B

class B { }; 
class D1 : private B { }; 
class D2 : public B { }; 
class D3 : B { };   //B private by default 
struct D4 : public B { }; 
struct D5 : private B { }; 
struct D6 : B { };  //B public by default 
class D7 : protected B { }; 
struct D8 : protected B { }; 

는 D6, D1, D3 및 D5, 의 개인 기지국과 보호 된 염기 D2, D4의 공개 염기이고 D7과 D8.


편집

여러분 중 일부는 말할 수있다,이 차이는 구조체와 클래스가 다른 존재에 대한 기본 액세스 (위의 총알 점에 주어진 차이) 주어진 의미가 있습니다. 하지만 내 생각에 inherited-struct은 (상속을 지원하지 않는) C-struct과 전혀 호환되지 않습니다. 나는 틀릴지도 모른다. 그래서 나는 좋은 예를 찾고있다. :-)

답변

7

왜 그런 생각이 들지 모르겠지만 구성원 하위 개체와 기본 클래스 하위 개체와 일관성이 있습니다. 그들은 struct으로 선언 된 클래스에서는 public이고 class으로 선언 된 클래스에서는 private입니다. 간단하고 기억하기 쉽습니다.

+0

@Charles : 당신이 말한 것처럼 "간단하고 기억하기 쉽지 않다"는 것이 아닙니다. 나는이 차이에 대한 설명을 찾고 있는데, 당신이 말한 것이 아닙니다. – Nawaz

+0

@Nawaz : 무슨 차이점이 있습니까? 'class' 상속이 기본적으로'public'이고 멤버 액세스'private' 인 경우 당신은 정당성을 요구하는 차이점을 가질 것입니다. 규칙이 더 간단한 선택이기 때문에, 더 이상 정당화 될 필요가 없습니다. –

+0

+1,이 추론을 좋아함 :) 또한 주입 된 클래스 이름에 일관성을 부여합니다. 상속이 공개되지 않는다면'struct A : SomeStruct {};'A :: SomeStruct'를 수행하면 클래스 밖에서 접근 할 수 없게됩니다. –

1

구조체와 클래스의 기본 액세스가 다르므로이 의미가 없습니까? (첫 번째 글 머리 기호에서와 같이)

구조체 (기본적으로 public)에서 액세스 수정자를 지정하지 않고 상속하는 경우 public 상속을 암시합니다. 반면에 클래스를 상속하는 경우 (기본적으로 private) 다음 액세스 수정자를 지정하지 않으면 개인 상속을 암시하는 것입니다.

질문에 뭔가 빠졌습니까?

+0

내 게시물을 업데이트했습니다. 그것을 확인하시기 바랍니다. :-) – Nawaz

+0

나는 생각한다, 나는 지금 이해했다. 게시물 주셔서 감사합니다. +1! – Nawaz

관련 문제