개발 Study

#26. 클래스의 생성자, 소멸자

HYuk 2021. 5. 5. 23:43
728x90
class CLS
{
public:
	CLS() // 생성자
		{
			cout<<"생성자 호출"<<endl;
		}
}

생성자

-> 객체 생성 시 자동으로 호출 되는 것

클래스의 이름으로 정의 되는데,

생성자는 반환타입이 없지만 () 안에 인자(매개변수)를 넣어 줄 수 있다.

함수 오버로딩을 사용할 수 있다.

이때, 객체생성을 외부에서 진행할 경우 -> 생성자의 멤버 접근 지정자는 위와 같이 public으로 지정해주어야 한다.

 

생성자를 정의하지 않을경우, 컴파일러가 자동으로 디폴트생성자를 만든다.

(사용자가 어떠한 생성자라도 만들 경우 디폴트 생성자는 만들어지지 않는다.)

 

객체의 생성과정은

객체생성 -> 메모리할당 -> 생성자호출

순으로 진행된다.

 

생성자 앞에 붙일 수 있는 explicit는 대입연산자 '=' 를 이용한 묵시적 형변환을 막기 위한 것으로

explicit를 생성자 앞에 붙일 경우 ()를 이용한 명시적 초기화만 가능하다.


class CLS
{
public:
	~CLS() // 소멸자
    {
    	cout<<"소멸자 호출!"<<endl;
    }
};

소멸자

-> 객체 소멸 시 자동으로 호출 되는 것

소멸자는 생성자앞에 ~를 붙여주면 된다.

생성자와 마찬가지로 반환타입은 없으며 매개변수를 받지 않는다.

객체 소멸 또한 외부에서 진행될 경우 public으로 지정해주어야 한다.

 

소멸자 또한 사용자가 정의하지 않을 경우 컴파일러가 디폴트소멸자를 자동으로 만들어서 호출한다.

 


전방선언

다른 파일에서 다른 클래스를 쓰려면

#include "해당클래스헤더명"

을 추가해줘야 한다.

이때 다양한 파일을 엮는 과정에서 불필요한 클래스 정보까지 알아야하기 때문에 파일크기가 커질 우려가 있다.

이때 전방선언을 해주는데 전방선언을 할 경우 정보를 알 수 없기 때문에

객체생성은 불가능하다!(포인터형은 사용 가능)

-> cpp파일에서 객체를 만들경우 include 필요

전방선언 시 있다고 알려만 줄 뿐 실제 탐색은 하지 않으므로, 오타에 주의해야 한다.

 

#include "CLS.h" // include 

class CLS; // 전방선언

728x90