생성자 상속
제공한 코드 조각:
class A { public: explicit A(int x) {} }; class B: public A { }; int main(void) { B *b = new B(5); delete b; }
GCC로 컴파일할 때 오류가 발생합니다. B(int)에 대해 일치하는 생성자. B가 A의 생성자를 상속할 것으로 예상할 수 있지만 C에서는 기본적으로 그렇지 않습니다.
C 11 이상에서는 생성자 상속 using using이라는 새로운 기능이 도입되었습니다. A::A를 사용하여 추가합니다. 클래스 B 내에서는 A의 모든 생성자를 명시적으로 상속할 수 있습니다.
class A { public: explicit A(int x) {} }; class B: public A { using A::A; };
그러나 생성자 상속은 전부 아니면 전무의 개념입니다. 특정 생성자만 선택적으로 상속할 수는 없습니다. 그렇게 하려면 원하는 생성자를 수동으로 정의하고 각 생성자에서 기본 생성자를 명시적으로 호출해야 합니다.
C 03 이하에서는 생성자 상속이 지원되지 않았습니다. 생성자는 각 파생 클래스 생성자에서 기본 생성자를 개별적으로 호출하여 수동으로 상속해야 했습니다.
템플릿 기반 기본 클래스의 경우 템플릿 구문을 사용하여 모든 생성자를 상속할 수 있습니다. 예:
template<class T> class my_vector : public vector<T> { public: using vector<T>::vector; ///Takes all vector's constructors /* */ };
위 내용은 C에서 생성자를 어떻게 상속받을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!