본문 바로가기
C++

생성자와 객체의 생성 과정

by 상레알 2008. 12. 30.
 C++에서의 객체 생성 과정은 두 단계로 나눠서 이야기 할수 있다.  객체는 생성시에 무조건 생성자를 거친다...ㅋㅋ

1. 메모리 할당
2. 생성자 호출

- 생성자의 외형적 특징 *생성자는 상속되지 않는  멤버 함수이다./상속되지 않는 멤버 함수로는 대입연산자가 잇다!

1. 함수이다.
2.클래스의 이름과 같은 이름을 지닌다.
3.리턴하지도 않고, 리턴 타입도 선언되지 않는다.

생성자는 객체 생성 시 원하는 값으로 초기화하기 위한 용도로 사용이 된다. 물론 다른 용도로 사용할 수도 있지만

그렇게 되면 적절한 형태의 생성자와는 거리가 멀어질수도 있다. 가급적이면 생성자는 멤버 변수를 초기화하는 용도로만

사용 해야 된다.

객체 생성 문법은 크게 세개의 영역으로 나뉘어 진다. 제일 먼저 클래스의 이름이 나오고, 그 다음으로 객체의 이름이 등장한다. 그리고 마지막으로 객체 생성시호출하고자하는 생성자에 대한 정보가 등장한다. 그러나 호출하고자 하는 생성자에 대한 정보가 없다면, void 생성자 즉 인자 값을 받지 않는 생성자를 호출하라는 의미로 받아 들여지게 된다.

*객체 생성과 동시에 초기화 할시에 생성자에 대한 정보가 없으면 컴파일 오류 행태가 달라고 물론 오류가 생긴다..당연한 이야기이긴 하지만....ㅋ

** 생성자는 보통 public 에 선언이 되어있는대 private로 되어잇는 경우도 잇기는 하다. private로 선언되어있으면
외부에서는 생성을 못한다는.....ㅠ


=================
디폴트 생성자와 생성자의 특징

첫째 생성자를 하나도 정의하지 않으면 디폴트 생성자가 자동 삽입된다.
둘째 생성자도 함수이므로 오버로딩이 가능하다.
셋째 생성자도 함수이므로 디폴트 매개 변수의 설정이 가능하다.

- 실제로 C++의 모든 객체들은 생성과정에서 반드시 한번 생성자가 호출 되게끔 되어있다.
즉.첫번째 과정으로 메모리만 할당받으면 객체라고 부를수 없다. 두번째 생성자 호출이 되어야 한다.

-컴파일러에 의해서 자동으로 삽입된 생성자가 호출된 생성자를 가르켜 디폴트 생성자라고 한다.
인자 값을 받지않는 void 생성자인 동시에 아무런 기능도 지니지 않는 것이 디폴트 생성자의 형태이다.
ex) Point() {}
즉 클래스정의하는데 있어서 프로그래머가 생성자를 하나도 정의하지 않으면 위에 예 와 같이 인자값받지도 않고
아무런 기능도 하지않는 디폴트 생성자가 자동으로 삽입된다.  =======하지만 프로그래머가 정의해 놓은 생성자가 하나라도 존재하면 디폴트(Default)생성자가 자동으로 삽입되지 않는다.

생성자도 함수 이기떄문에 함수 오버로딩 가능!! 그러므로 당연히 디폴트매개변수 설정가능!!!