비교 차트
비교 근거 | 은밀한 | 보호 된 |
---|---|---|
상속 클래스에 속성 상속 | 파생 클래스는 기본 클래스 비공개 멤버에 액세스 할 수 없습니다. | 파생 클래스는 기본 클래스로 보호 된 멤버에 액세스 할 수 있습니다. |
접근성 | 클래스의 비공개 멤버는 클래스 범위 밖에서 액세스 할 수 없습니다. | 클래스의 보호 된 멤버는 즉시 파생 된 클래스를 제외하고 클래스 범위 밖으로 액세스 할 수 없습니다. |
자기 계급에서 접근 가능 | 예 | 예 |
파생 클래스에서 액세스 가능 | 아니 | 예 |
외부에서 접근 가능 | 아니 | 아니 |
비공개의 정의
비공개로 선언 된 클래스 멤버는 클래스 내에서만 검색 할 수 있습니다. 즉, 클래스의 개인 섹션에서 선언 된 멤버는 클래스의 friend 함수와 멤버 함수를 통해서만 액세스 할 수 있습니다. 개인 멤버는 파생 클래스에 직접 가져올 수 없으며 클래스 범위 밖에서 액세스 할 수 없습니다.
C ++ 프로그램은 개인 액세스 지정자의 개념을 보여줍니다.
#include using namespace std; class A {private : int i; public : void get () {cout <> i; }}; 클래스 B : public A {public : void show () {i ++; cout << ""\ n incrementcpp 뒤에 입력 한 번호 "> # using namespace std; 클래스 포유류 {public : void mammalMethod (void) {cout << "포유류 카테고리에 속합니다."<위의 주어진 프로그램에서 자식 클래스의 한 객체는 "ob"이라는 이름으로 생성되고 부모 클래스의 멤버 함수는 호출 하위 클래스 메서드 "marine_mammalMethod"를 통해 액세스 할 수 있습니다. 그러나 부모 메서드는 "ob"개체로 직접 액세스 할 수 없습니다.
보호의 정의
클래스에서 보호 된 것으로 선언 된 클래스 멤버는 클래스의 멤버 함수 및 friend 함수를 통해서만 액세스 할 수 있습니다. 이러한 보호 된 멤버는 하위 클래스 (즉시 파생 됨)를 제외한 클래스 범위에서 액세스 할 수 없습니다. 상속에서 제한된 목적을 제공하고 제한된 방식으로 속성을 상속합니다.
아래 주어진 C ++ 프로그램은 보호 된 액세스 지정자의 개념을 보여줍니다.
#include using namespace std; class account1 {protected : int x, y; // 파생 클래스에 접근 가능 public : void set (int a, int b) {x = a; y = b; } void show () {cout <위의 예제에서 하위 클래스는 데이터 멤버가 public 또는 protected로 선언 되었기 때문에 기본 클래스의 속성을 상속합니다. x와 y가 기본 클래스에서 private으로 선언 되었다면 불가능합니다.
개인 및 C ++의 주요 차이점
- protected 키워드는 해당 클래스에 비공개이지만 파생 클래스에서 상속 및 사용할 수있는 클래스 멤버를 작성하는 데 사용할 수 있습니다. 반대로 개인 멤버를 파생 클래스에 직접 상속 할 수 없으므로 private를 사용하는 동안이 작업을 수행 할 수 없습니다.
- 기본 액세스가 개인 액세스 지정자를 사용하여 상속되면 기본 클래스의 모든 공개 및 보호 멤버, 파생 클래스의 전용 멤버가 만들어집니다. 반대로, 이것은 보호 된 액세스 지정자의 경우가 아닙니다.
결론
private 및 protected는 클래스 및 해당 멤버의 가시성을 다르게 설정하는 데 사용되는 액세스 지정자입니다. 그러나 보호는 개인보다 더 융통성이 있습니다.