。공부 。

<C++> 생성자와 소멸자

kyoe 2007. 11. 29. 23:55
객체를 생성할때 생성절차를 꼭밟아야하는것이 있는데 생성자와 소멸자가 그들이다.
객체를 생성하기 위해서 생성자와 소멸자가 필요하다 물론 생성자와 소멸자를 정의하지 않아도 객체생성은 가능하다 디폴트 생성자와 디폴트 소멸자가 존재하기때문에 가능한것이다.
디폴드생성자와소멸자는 아무것도 없다 단지 객체생성의 규칙이이때문에 존재해야하는것이다.

* 생성자 *
- 객체를 생성과 동시에 호출되어지는 함수를 말한다.
- 리턴타입을 갖지않으며 리턴하지도 않는다.
- 생성자이름은 클래스명과 동일해야한다.
- 생성자 오버로딩이 디폴트매개변수 선언이 가능하다.
- 주로 데이터를 초기화할때 사용되고 디버깅할때도 사용된다.

* 소멸자 *
- 객체가 소멸과 동시에 호출되어지는 함수를 말한다.
- 리턴타입을 갖지않으며 리턴하지도 않는다.
- 전달인자는 항상 void 어떠한 인자도 받을수없다.
- 소멸자이름은 클래스와 동일하지만 함수명앞에 '~'를 붙여줘야한다.
- 오버로딩 디폴트 매개변수 선언할수없다.
- 동적생성된 객체의 할당된메모리 영역을 해제할때 주로 사용된다.

* 생성자와 소멸자 호출의 간단한 예제 *
class kyoe{
    int a;
public:
    kyoe(){
       cout<<"생성자 호출"<<endl;
    }
    ~kyoe(){
       cout<<"소멸자 호출"<<endl;
    }
}

int main(void){
    kyoe obj;      // 생성자 호출됨
    return 0;      // 소멸자 호출됨
}

* 생성자 오버로딩 *
생성자의 매개변수 타입과 매개변수의 갯수에 따라 생성자의 호출을 달리 할수있다.

class kyoe{
   int a,b;
public:
   kyoe(int _a,int _b){                    
      cout<<"생성자 호출"<<endl;
       a = _a;
       b = _b;
   }
    kyoe(int _a){
      cout<<"생성자 호출"<<endl;
      a = _a;
      b = 100;
   }

int main(void){
   kyoe obj(10,20);      // 첫번째 매개변수가 2개인 생성자 호출
   kyoe obj(10);          // 두번째 매개변수가 1개인 생성자 호출
   return 0;        
}