struct
과 class
사이에 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
과 전혀 호환되지 않습니다. 나는 틀릴지도 모른다. 그래서 나는 좋은 예를 찾고있다. :-)
@Charles : 당신이 말한 것처럼 "간단하고 기억하기 쉽지 않다"는 것이 아닙니다. 나는이 차이에 대한 설명을 찾고 있는데, 당신이 말한 것이 아닙니다. – Nawaz
@Nawaz : 무슨 차이점이 있습니까? 'class' 상속이 기본적으로'public'이고 멤버 액세스'private' 인 경우 당신은 정당성을 요구하는 차이점을 가질 것입니다. 규칙이 더 간단한 선택이기 때문에, 더 이상 정당화 될 필요가 없습니다. –
+1,이 추론을 좋아함 :) 또한 주입 된 클래스 이름에 일관성을 부여합니다. 상속이 공개되지 않는다면'struct A : SomeStruct {};'A :: SomeStruct'를 수행하면 클래스 밖에서 접근 할 수 없게됩니다. –