본문 바로가기

C++

[C++] 클래스명 객체명();는 디폴트 생성자를 호출하지 않는다.

클래스명 객체명(인수)는 클래스에서 매개변수 하나를 인자로 받는 생성자를 호출한다.

두개도 세개도 마찬가지이다. 그렇다면 인수를 넣지 않고 빈괄호만 쓰면 디폴트 생성자를 호출할까?

A a; // A의 디폴트 생성자 호출
A a(); // A의 디폴트 생성자 호출 X

 Position Here;

 Position Here=Position();

 Position *pPos=new Position;

 Position *pPos=new Position();

⑤ Position Here();

 

1~5번중 5번만이 디폴트 생성자를 호출하지 않는다. 

5번은 Position 타입을 반환하는 Here이라는 이름의 함수 원형을 선언한 것이다.

int형으로 바꿔 생각하면 이해하기 쉽다.

 

int func;  // 변수
int func();// 함수

 

첫번째 줄은 int형의 변수지만 두번째 줄은 int를 반환하는 함수 func이다.

바보같지만 당연히 나는 후자도 될거라고 생각했어서 정리해봤다.