생 성 자


클래스 정의에서 다음의 형태를 띠는 함수가 생성자이다.


# 클래스의 이름과 함수의 이름이 동일하다.

# 반환형이 선언되어 있지 않으며, 실제로 반환하지 않는다.


이러한 유형의 함수를 가리켜 '생성자'라 하며, 생성자는 "객체 생성시 딱 한번 호출된다."

----------------------------------------------------------------------------------------------------------------------------------------------------------------


* 생성자도 함수의 일종이니 오버로딩이 가능하다.

* 생성자도 함수의 일종이니 매개변수에 '디폴트 값'을 설정할 수 있다.





28라인의 함수 void SimpleClass(void) 와 46라인의 함수void SimpleClass(int n1=1, int n2=0) 를 다음과 같은 문장으로 구성하면 안된다.

SimpleClass sc1();                (X)



다음과 같이 구성을 해야 한다.

SimpleClass sc1;                                                    (O)

SimpleClass * ptr = new SimpleClass;                  (O)

SimpleClass * ptr = new SimpleClass();                (O)


매개변수가 선언되어 있지 않으니 소괄호를 생략할 수 있다.



그렇다면, 다음 문장도 허용이 가능할 것 같은데 허용이 안된다!!

SimpleClass sc1();                (X)



예제)



출력 결과 : 20, 30


※ 보통 함수의 원형은 전역적으로(함수 밖에) 선언하지만, 위 예제에서 보이듯이 함수내에 지역적으로도 선언 가능하다.


위 예제의 42라인의 문장은 이러한 함수의 원형 선언에 해당된다. 즉, 이 문장을 void형(인자를 받지 않는) 생성자의 호출문으로 인정해 버리면, 컴파일러는 이러한 문장을 만났을 때, 이것이 객체생성문인지 함수의 원형선언인지를 구분할 수 없게 된다.


그래서 이러한 유형의 문장은 객체생성이 아닌, 함수의 원형선언에만 사용하기로 약속하였다.


'Programming > C++' 카테고리의 다른 글

디폴트 생성자(Default Constructor)  (0) 2012.05.20
이니셜라이저(Initializer)  (0) 2012.05.19
캡슐화  (0) 2012.05.12
const 함수  (2) 2012.05.08
정보은닉(Information Hiding)  (0) 2012.05.03
Posted by scii
: