코드로 설명하는 것이 더 쉽습니다.
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에서 코드를 시도했습니다. 선언을 사용하여 멤버 함수의 액세스 수준을 변경할 수 있지만 생성자에서는 동일하게 수행 할 수 없습니다. 그것은 나에게 이상하다. 왜 이렇게 작동하는지 아는 사람이 있습니까?
이 경우 생성자는 생성되지 않고 대신 상속됩니다 (실제로는 기본 클래스에서). 문서
에 따르면 생성자를 상속 할 때 :
해당 기본 생성자와 동일한 액세스 권한이 있습니다.
어디 액세스 를 나타내는 액세스 지정자를 .
반면에 멤버 메서드의 경우 :
using-declaration은 기본 클래스의 멤버를 파생 클래스 정의에 도입합니다. 예를 들어 기본의 보호 된 멤버를 파생의 공용 멤버로 노출합니다.
이 경우 액세스를 명시 적으로 변경할 수 있습니다.
그렇기 때문에 선언을 사용하여 멤버 함수의 액세스 수준을 변경할 수 있지만 생성자에서는 동일하게 수행 할 수 없습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다