C++복습

C++ 복습) 클래스생성자와 소멸자

PJNull 2021. 11. 19.
728x90
반응형

클래스에는 맴버함수를 추가 및 제어 할수 있다.

그중에서도 생성자와 소멸자는 상당히 특별한 맴버함수인데, 시작과 끝을 알리는 맴버함수이다.

 

 

생성자와 소멸자

 

생성자는 클래스가 탄생하면 자동적으로 호출되는 맴버함수이고, 다양한 생성자가 존재한다. 반면 소멸자는 클래스가 소멸할때 호출되며 단하나만 존재한다.

 

 

 

생성자

 

1.기본생성자

기본생성자는 인자가 없는 생성자를 의미한다.

 

class Constructor
{
public:
Constructor()
{
  //기본생성자
}
};

2.복사 생성자

복사 생성자는  자기자신의 참조타입을 인자로 받는 생성자이다.복사생성자는 이미 만들어져 있는 클래스의 데이터를 복사할때 사용되는 생성자이다.

 

class Constructor
{
public:
Constructor(const Constructor& constructor)
{

 _a=constructor._a; //복사생성자(다른 클래스를 복사함)
}
};

 

※주의)밑의 코드는 같아 보일수 있으나 전혀 다른코드이다.

 

복사생성자가 호출되는 코드

Constructor c1;

Constructor c2=c1;

일반 생성자가 호출되고 다음으로 복사가 이루어지는 코드.

Constructor c1;

Constructor c2;

c2=c1;

3.암시적 생성자

생성자를 명시적으로 생성하지 않았을 경우 아무 인자도 받지 않는 기본생성자가 컴파일러에 의해 자동으로 호출된다.하지만 명시적으로 하나라도 만들게 된다면 암시적 생성자는 더이상 호출되지 않는다.

기본적으로 복사생성자와 비슷한 역활을 하지만 특정 데이터를 복사하거나 메모리를 제어하는데 있어 제약이 있는것이 복사생성자와의 차이라고 할 수 있다.

 

Constructor c1;

Constructor c2=c1;//암시적 생성자

 

 

 

4.기타 생성자

기본/복사 생성자가 아닌 나머지 생성자들을 총칭한다.

단, 기타 생성자들 중에서 인자를 1개만 받는 것을 타입변환 생성자라고 부르기도한다.

이런 타입변환 생성자는 컴파일러가 임의로 만들어주는 암시적 타입변환과 프로그래머가 직접만드는 명시적 타입변환으로 나뉜다.암시적 타입변환의 경우 예기치 못한 에러를 발생할수 있기 때문에 명시적 타입변환 생성자 앞에 explicit을 붙여 주는 것으로써 암시적 타입변환생성자를 제한할수 있다. 

 

class Constructor
{
public:
Constructor(int a, float x, float y)
{

 //기타생성자
}
};

 

class Constructor
{
public:
explicit Constructor(int a)
{

 //명시적 타입변환 생성자
}
};

Constructor c1;

c1=(Constructor)1;    //타입변환생성자호출

 

소멸자

클래스의 생명주기가 끝나면 호출되는 맴버함수이다.

 

class Constructor
{
public:
~Constructor()
{
  //소멸자
}
};
728x90
반응형

'C++복습' 카테고리의 다른 글

C++복습) Modern C++/ Auto  (0) 2021.12.22
C++복습) 생성자 맴버 초기화 리스트  (0) 2021.11.22
C++복습) 다형성  (0) 2021.11.21
C++복습) 클래스 캡슐화(은닉성)  (0) 2021.11.20
C++복습) 클래스 상속성  (0) 2021.11.20

댓글