>백엔드 개발 >C++ >보호된 부모 클래스 멤버는 자식 클래스의 초기화 목록을 통해 초기화될 수 있습니까?

보호된 부모 클래스 멤버는 자식 클래스의 초기화 목록을 통해 초기화될 수 있습니까?

DDD
DDD원래의
2024-10-25 06:07:02832검색

Can Protected Parent Class Members Be Initialized via Child Class's Initialization List?

자식 클래스의 초기화 목록에서 부모 클래스의 보호된 데이터 멤버 초기화

객체 지향 프로그래밍에서 파생 클래스는 기본 클래스의 기능을 상속받을 수 있습니다. . 자주 발생하는 한 가지 질문은 하위 클래스 생성자의 초기화 목록을 사용하여 상위 클래스의 보호된 데이터 멤버를 초기화할 수 있는지 여부입니다.

다음 코드 예제를 고려하세요.

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

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

이 코드를 컴파일하려고 시도하면 컴파일러는 "Child" 클래스에 "something"이라는 데이터 멤버가 포함되어 있지 않다는 오류를 발생시킵니다. 이는 초기화 목록이 하위 클래스 자체 내의 데이터 멤버만 초기화하도록 허용되기 때문입니다.

원하는 기능을 달성하려면 원하는 초기 값을 받아들이고 이를 전달하는 생성자를 상위 클래스에 추가해야 합니다. 기본 클래스의 데이터 멤버에. 예:

<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>

이 경우 "부모" 클래스의 생성자는 자식 클래스의 초기화 목록에서 호출될 때 "무언가"로 보호되는 데이터 멤버를 초기화합니다. 따라서 하위 클래스는 상위 클래스로부터 초기화된 "something" 데이터 멤버를 상속받습니다.

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

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