>  기사  >  백엔드 개발  >  보호된 데이터 멤버를 초기화하기 위해 자식 클래스 생성자의 초기화 목록을 언제 사용할 수 있습니까?

보호된 데이터 멤버를 초기화하기 위해 자식 클래스 생성자의 초기화 목록을 언제 사용할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-24 13:59:02670검색

When Can the Initialization List of a Child Class Constructor Be Used to Initialize Protected Data Members?

초기화 목록 및 보호된 멤버 초기화

C를 사용하는 객체 지향 프로그래밍에서는 클래스가 상위 클래스로부터 상속받는 것이 일반적인 관행입니다. 기능을 확장합니다. 그러나 질문이 생깁니다. 하위 클래스 생성자의 초기화 목록을 사용하여 상위 클래스에서 protected로 선언된 데이터 멤버를 초기화할 수 있습니까?

이를 달성하기 위해 다음과 유사한 코드가 있을 수 있습니다. 다음:

<code class="cpp">class Parent {
protected:
    std::string something;
};

class Child : public Parent {
private:
    Child() : something("Hello, World!") {}
};</code>

그러나 이 시도는 컴파일러 오류를 발생시켜 Child 클래스에 어떤 이름의 필드가 없음을 나타냅니다. 이는 데이터 멤버가 상위 클래스에서 protected로 선언되어 있기 때문입니다.

하위 클래스의 초기화 목록을 사용하여 protected 멤버를 초기화하려면 대체 접근 방식이 필요합니다. 필요한 초기화가 포함된 생성자를 상위 클래스에 추가할 수 있으며, 그런 다음 이 생성자를 하위 클래스의 생성자에서 호출할 수 있습니다. 이는 생성자 전달을 통해 달성할 수 있습니다.

<code class="cpp">class Parent {
protected:
    Parent(const std::string& something) : something(something) {}

    std::string something;
};

class Child : public Parent {
private:
    Child() : Parent("Hello, World!") {}
};</code>

이 수정된 코드에서는 보호된 생성자가 Parent 클래스에 추가되고 문자열 매개 변수를 사용합니다. 그런 다음 Child 클래스의 생성자는 필요한 인수를 전달하고 Something 데이터 멤버를 초기화하기 위해 생성자 전달을 사용하여 Parent 클래스의 보호된 생성자를 호출합니다.

위 내용은 보호된 데이터 멤버를 초기화하기 위해 자식 클래스 생성자의 초기화 목록을 언제 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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