생성자와 소멸자
생성자
디폴트 생성자
객체가 되기 위해서는 반드시 하나의 생성자가 호출되어야 한다.
생성자를 정의하지 않는 클래스에는 C++ 컴파일러
에 의해서 디폴트 생성자 라는 것이 자동으로 삽입된다.
이미 선언한 생성자가 있다면 디폴트 생성자는 삽입되지 않는다.
class A
{
private :
int num;
public :
AAA (){}
int GetNum{return num};
};
private 생성자
객체의 생성은 클래스의 외부에서 진행되기 때문에 생성자는 public
으로 선언되어야 한다.
클래스 내부 에서만 객체의 생성 을 허용하려는 목적으로 생성자를 private
으로 선언하기도 한다.
이니셜라이저
이니셜라이저를 이용하면 선언과 동시에 초기화 가 이뤄지는 형태로 바이너리 코드가 생성된다.
성능의 약간의 이점이 있다.
const
멤버변수도 이니셜라이저를 이용하면 초기화가 가능하다.
초기화 대상을 명확하게 인식할 수 있다.
멤버 이니셜라이저
class Rectangle
{
private :
Point upLeft;
Point lowRight;
public :
Rectangle (const int &x1, const int &y1, const int &x2, const int &y2)
: upLeft (x1, y1), lowRight (x2, y2) {}
};
객체 upLeft
의 생성과정에서 x1과 y1을 인자로 전달받는 생성자를 호출 한다.
객체 lowRight
의 생성과정에서 x2와 y2를 인자로 전달받는 생성자를 호출 한다.
멤버 이니셜라이저는 멤버변수 로 선언된 객체의 생성자 호출 에 활용된다.
객체의 생성 과정
메모리 공간의 할당
이니셜라이저를 이용한 멤버변수(객체)의 초기화
생성자의 몸체부분 실행
소멸자
클래스의 이름 앞에 ~가 붙은 형태의 이름을 갖는다.
반환형이 선언되어 있지 않으며 반환하지 않는다.
매개변수는 void
형으로 선언되어야 하기 때문에 오버로딩, 디폴트 값 설정이 불가능하다.
생성자에서 할당한 리소스의 소멸 에 사용된다.
class A
{
private :
int num;
public :
AAA (){}
~AAA (){}
int GetNum{return num};
};
클래스와 배열
객체 배열
SoSimple arr[10 ];
SoSimple * ptrArr = new SoSimple[10 ];
배열을 선언하는 경우에도 생성자는 호출이 되지만 호출할 생성자를 별도로 명시하지 못한다.
다른 형태로 생성자를 정의했다면, 기본 형태의 생성자 또한 반드시 정의되어 있어야 한다.
객체 포인터 배열
SoSimple * arr[3 ];
arr[0 ]->func ();
arr[1 ]->func ();
arr[2 ]->func ();
객체의 주소 값 저장이 가능한 포인터 변수로 이뤄진 배열
this 포인터
객체 자신 을 가리키는 용도로 사용되는 포인터.
this
를 사용하면 매개변수의 이름 을 멤버변수의 이름 과 같게 쓸 수 있다.
class Point
{
private :
int xpos;
int ypos;
public :
Point (int xpos, int ypos)
{
this ->xpos=xpos;
this ->ypos=ypos;
}
};
공유하기
URL 복사 카카오톡 공유 페이스북 공유 엑스 공유