생성자는 다음과 같은 방법으로 일반 함수와 다릅니다. 이렇게 하면 클래스 선언과 충돌하므로 유효하지 않습니다. 복사 생성자는 이러한 서명 중 하나를 가질 수 있습니다: Visual Studio 2017 버전 15.7 이상: /std:C++17 모드의 using 문은 파생된 생성자에 동일한 서명을 가진 것을 제외하고 기본 클래스의 모든 생성자 범위를 제공합니다. 클래스. 일반적으로 파생 된 클래스가 새 데이터 멤버 또는 생성자가 선언하지 않는 경우 상속 생성기를 사용하는 것이 가장 좋습니다. 비주얼 스튜디오 2017 버전 15.7의 개선 사항도 참조하십시오. 따라서 보조 목적에 따라 첫 번째 프로그램에서 는 일치하는 생성자가 있기 때문에 foo1을 만들 수 있습니다. 이 일치 하는 생성자는 암시적으로 생성 된 생성자입니다. 일치하는 생성자가 없기 때문에 foo2를 만들고 동시에 초기화할 수 없습니다.

그러나 늦은 프로그램에서는 일치하는 생성자가 있기 때문에 foo2를 만들고 초기화 할 수 있습니다. 일치하는 생성자는 Foo(int m = 111, int n = 222)입니다. 컴파일러에서 생성된 기본 생성자는 클래스 멤버가 기본 생성가능하지 않은 경우 삭제된 것으로 정의됩니다. 예를 들어 클래스 형식의 모든 멤버와 해당 클래스 형식 멤버에는 액세스할 수 있는 기본 생성자 및 소멸자가 있어야 합니다. 참조 형식의 모든 데이터 멤버와 const 멤버에는 기본 멤버 초기화가 있어야 합니다. 내 예제 프로그램은 캡슐화를 위반한다는 것을 보여주는 «좋은 경우»입니다. 생성자가 만든 개체는 생성자가 완료되는 즉시 완전히 초기화됩니다. 자세한 내용은 균일 한 초기화 및 위임 생성자 참조.

클래스에 단일 매개 변수가 있는 생성자가 있거나 기본값을 제외한 모든 매개 변수에 기본값이 있는 경우 매개 변수 형식을 클래스 유형으로 암시적으로 변환할 수 있습니다. 예를 들어 Box 클래스에 다음과 같은 생성자가 있는 경우: 클래스에 다른 생성자가 없는 경우 C++는 자동으로 공용 기본 생성자 생성자 생성됩니다. 이를 암시적 생성자(또는 암시적으로 생성된 생성자)라고도 합니다. 클래스는 멤버 변수로 다른 클래스를 포함할 수 있습니다. 기본적으로 외부 클래스가 생성되면 멤버 변수에는 기본 생성자가 호출됩니다. 생성자의 본문이 실행되기 전에 발생합니다. 클래스에 기본 생성자가 없는 경우 대괄호 구문만 사용하여 해당 클래스의 개체 배열을 생성할 수 없습니다. 예를 들어 이전 코드 블록을 감안할 때 마지막 질문에 대한 대답은 마지막 문장에서 나를 혼란스럽게 합니다. 컴파일러가 매개 변수를 사용할 수 있도록 빈 생성자를 만들지 않으면 ? 그런 다음 마지막 문장은 그 반대를 말한다? 나는 아마 그냥 미안 혼란스럽다. 좀 더 가까운 C++20에서 이 강의에 예를 들어 추가해 집계에 더 많은 기능을 추가했으므로 어느 시점에 레슨에 대한 업데이트가 있을 것입니다.

이제 레슨이 얼마나 뒤처지고 있는지(C++14, C++17의 일부만) 시간이 걸릴 수 있습니다. 솔루션: «…. 기본 생성자 자신을 제공하지 않았다고 가정하면 매개 변수없이 개체를 인스턴스화 할 수 없습니다. » 클래스에 다른 생성자가 있는 경우 암시적으로 생성된 생성자가 제공되지 않습니다.