>백엔드 개발 >C++ >액세스 지정자는 C 상속의 멤버 접근성에 어떤 영향을 줍니까?

액세스 지정자는 C 상속의 멤버 접근성에 어떤 영향을 줍니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 03:27:08443검색

How Do Access Specifiers Affect Member Accessibility in C   Inheritance?

상속의 액세스 지정자 이해

객체 지향 프로그래밍에서 액세스 지정자는 클래스 멤버의 액세스 가능성을 제어하는 ​​키워드입니다. 기본 클래스에서 상속할 때 파생 클래스에 있는 해당 멤버의 접근성은 상속 중에 사용된 액세스 지정자에 따라 달라집니다.

상속 유형

C는 세 가지 유형을 지원합니다. 상속:

  • 공개 상속: 공개 멤버 기본 클래스는 파생 클래스의 공개 멤버가 됩니다. 보호된 멤버는 파생 클래스에서 보호됩니다.
  • 보호된 상속: 기본 클래스의 공용 멤버는 파생 클래스의 보호된 멤버가 됩니다. 보호된 멤버는 파생 클래스에서 보호됩니다.
  • 개인 상속: 기본 클래스의 공개 및 보호 멤버는 파생 클래스의 개인 구성원이 됩니다.

회원 접근 규칙

다음은 상속 중에 회원의 접근 수준이 다음과 같이 변경되는 방식입니다. 사용된 액세스 지정자:

공개 및 보호 상속:

  • 기본 클래스의 공개 멤버는 파생 클래스에서 공개 또는 보호 상태를 유지합니다.
  • 기본 클래스의 보호된 멤버는 파생 클래스에서도 보호된 상태로 유지됩니다. class.

Private 상속:

  • 기본 클래스의 공개 및 보호 멤버는 액세스 지정자를 잃고 파생 클래스에서 비공개가 됩니다. class.

예:

class Base {
public:
    int public_member;
protected:
    int protected_member;
    int private_member; // private members are not inherited
};

class Derived1 : public Base {
public:
    void access_member() {
        // Access rules:
        public_member = 10; // allowed
        protected_member = 20; // allowed
        // private_member = 30; // not accessible
    }
};

class Derived2 : protected Base {
public:
    void access_member() {
        // Access rules:
        public_member = 10; // allowed
        protected_member = 20; // allowed
        // private_member = 30; // not accessible
    }
};

class Derived3 : private Base {
public:
    void access_member() {
        // Access rules:
        public_member = 10; // not accessible
        protected_member = 20; // not accessible
        // private_member = 30; // not accessible
    }
};

상속 모범 사례

액세스 지정자를 선택할 때 상속, 다음 사항을 고려하십시오 지침:

  • 별도의 필요가 없는 한 기본값은 private입니다. Private은 클래스의 내부 구현을 보호합니다.
  • 파생 클래스에 기능을 노출하려면 protected를 사용하세요. .
  • 공개용으로만 사용하세요. 클래스 계층 구조 외부의 멤버.
  • 비공개 또는 보호 멤버의 공개 상속 방지: 이렇게 하면 캡슐화가 중단되고 예기치 않은 동작이 발생할 수 있습니다.

위 내용은 액세스 지정자는 C 상속의 멤버 접근성에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.