선언을 사용하여 생성 된 생성자가 기본 클래스와 동일한 액세스 수준을 갖는 이유는 무엇입니까?

이삭 수

코드로 설명하는 것이 더 쉽습니다.

   class A {
    protected:
        A(int i) {}
        void foo() {}
    };

    class B : public A {
    public:
        B() : A(0) {}
        using A::A;
        using A::foo;
    };

    int main() 
    {
        B b1;
        // [protected] A::foo => [public] B::foo
        b1.foo(); // Ok
        // [protected] A::A(int) => [protected] B::B(int)
        B b2(0); // cannot access protected member
    }

VS2015에서 코드를 시도했습니다. 선언을 사용하여 멤버 함수의 액세스 수준을 변경할 수 있지만 생성자에서는 동일하게 수행 할 수 없습니다. 그것은 나에게 이상하다. 왜 이렇게 작동하는지 아는 사람이 있습니까?

Skypjack

이 경우 생성자는 생성되지 않고 대신 상속됩니다 (실제로는 기본 클래스에서). 문서
에 따르면 생성자를 상속 할 때 :

해당 기본 생성자와 동일한 액세스 권한이 있습니다.

어디 액세스 를 나타내는 액세스 지정자를 .
반면에 멤버 메서드의 경우 :

using-declaration은 기본 클래스의 멤버를 파생 클래스 정의에 도입합니다. 예를 들어 기본의 보호 된 멤버를 파생의 공용 멤버로 노출합니다.

이 경우 액세스를 명시 적으로 변경할 수 있습니다.

그렇기 때문에 선언을 사용하여 멤버 함수의 액세스 수준을 변경할 수 있지만 생성자에서는 동일하게 수행 할 수 없습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관