다음을 통해 공유


생성자를 선언하기 위한 규칙

생성자의 이름은 해당 클래스의 이름과 같습니다. 오버로드된 함수의 규칙에 따라 임의의 수의 생성자를 선언할 수 있습니다. 자세한 내용은 오버로드를 참조하십시오.

class-name  (  argument-declaration-list  )

설명

argument-declaration-list가 비어 있을 수 있습니다.

C++에서는 다음 표에 설명되어 있는 두 가지 특별한 종류의 생성자인 기본 및 복사 생성자를 정의합니다.

기본 및 복사 생성자

생성 종류

인수

용도

기본 생성자

인수 없이 호출될 수 있습니다.

해당 클래스 형식의 기본 개체를 생성합니다.

복사 생성자

동일한 클래스 형식에 대한 참조의 단일 인수를 수락할 수 있습니다.

클래스 형식의 개체를 복사합니다.

기본 생성자는 인수 없이 호출할 수 있습니다. 하지만 모든 인수에 기본값이 제공된 경우 인수 목록을 사용하여 기본 생성자를 선언할 수 있습니다. 마찬가지로 복사 생성자는 동일 클래스 형식에 대한 참조의 단일 인수를 수락해야 합니다. 모든 후속 인수에 기본값이 있는 경우 인수를 추가로 제공할 수 있습니다.

생성자를 제공하지 않는 경우 컴파일러는 기본 생성자를 생성하려고 합니다. 복사 생성자를 제공하지 않는 경우 컴파일러는 기본 생성자를 생성하려고 합니다. 이 컴파일러에서 생성되는 생성자는 공용 멤버 함수로 간주됩니다. 개체인데 참조가 아닌 첫 번째 인수를 사용하여 복사 생성자를 지정하는 경우 오류가 생성됩니다.

컴파일러에서 생성되는 기본 생성자는 개체를 설정하고(앞에서 설명한 vftables 및 vbtables 초기화) 기본 클래스와 멤버에 대한 기본 생성자를 호출하지만 다른 어떠한 작업도 수행하지 않습니다. 기본 클래스 및 멤버 생성자는 존재하고 액세스할 수 있으며 명확한 경우에만 호출됩니다.

컴파일러에서 생성되는 복사 생성자는 새 개체를 설정하고 복사할 개체의 콘텐츠에 대해 멤버 방식으로 복사를 수행합니다. 기본 클래스 또는 멤버 생성자가 있으면 호출되고, 그렇지 않으면 비트 복사가 수행됩니다.

type 클래스의 모든 기본 및 멤버 클래스에 const 인수를 수락하는 복사 생성자가 있는 경우 컴파일러에서 생성된 복사 생성자는 const type**&** 형식의 단일 인수를 수락합니다. 그렇지 않으면 컴파일러 생성 복사 생성자는 type**&** 형식의 단일 인수를 수락합니다.

생성자를 사용하여 const 또는 volatile을 초기화할 수 있으나 생성자 자체는 const 또는 volatile로 선언될 수 없습니다. 올바른 생성자 저장소 클래스는 inline뿐입니다. __declspec 키워드를 포함한 다른 모든 저장소 클래스 한정자를 생성자와 함께 사용하면 컴파일러 오류가 발생합니다.

stdcall 호출 규칙은 __stdcall 키워드를 사용하여 선언된 정적 멤버 함수 및 전역 함수에 사용되며 가변 인수 목록은 사용하지 않습니다. 생성자와 같은 비정적 멤버 함수에 대해 __stdcall 키워드를 사용할 경우 컴파일러에서 thiscall 호출 규칙을 사용합니다.

기본 클래스의 생성자는 파생 클래스에서 상속되지 않습니다. 파생 클래스 형식의 개체를 만들 때 해당 개체는 기본 클래스 구성 요소로 시작하여 생성된 후 파생 클래스 구성 요소로 이동합니다. 컴파일러는 완전한 개체의 해당 부분이 초기화될 때 각 기본 클래스의 생성자를 사용합니다(기본 클래스 초기화에 설명된 가상 파생의 경우 제외).

참고 항목

참조

생성자 (C++)