본문 바로가기

C++

[C++] 생성자와 소멸자

생성자란?

객체 생성 시 처음 한번 호출되는 함수다.

주로 값을 처음 초기화할 때 사용한다.

생성자는 클래스와 동일한 명칭을 가지며, 반환형이 없다.


Point.h

class Point
{
private:
	int xpos;
	int ypos;
public:
	Point();
	Point(int x, int y);
	void ShowPoint();
};


Point.cpp

#include <iostream>
#include "Point.h"

Point::Point() {
	xpos = 1;
	ypos = 2;
}

Point::Point(int x, int y) {
	xpos = x;
	ypos = y;
}

void Point::ShowPoint() {
	std::cout << "[" << xpos << ", " << ypos << "]" << std::endl;
}


main.cpp

#include "Point.h"

using namespace std;

int main() {
	Point p1;
	p1.ShowPoint();

	Point p2(5, 5);
	p2.ShowPoint();

	// 동적할당
	Point *ptr1 = new Point;
	ptr1->ShowPoint();

	Point *ptr2 = new Point();
	ptr2->ShowPoint();

	Point *ptr3 = new Point(10, 20);
	ptr3->ShowPoint();

	return 0;
}


결과



자동으로 생성자가 호출되어, 저장된 값이 출력되는 것을 볼 수 있다.



소멸자란?

객체 소멸 시 반드시 호출되는 함수이다.

주로 생성자에서 할당한 리소스의 소멸에 사용된다.

소멸자는 클래스의 이름 앞에 '~'가 붙은 형태의 이름을 가지며, 반환형이 없다.


Point.h

class Point
{
private:
	int *xpos;
	int *ypos;
public:
	Point();
	void ShowPoint();
	~Point();
};


Point.cpp

#include <iostream>
#include "Point.h"

Point::Point() {
	xpos = new int;
	ypos = new int;

	*xpos = 1;
	*ypos = 2;
}

void Point::ShowPoint() {
	std::cout << "[" << *xpos << ", " << *ypos << "]" << std::endl;
}

Point::~Point() {
	delete xpos;
	delete ypos;
}


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

[C++] 이러한 피연산자와 일치하는 "<<" 연산자가 없습니다.  (0) 2019.05.19
[C++] 문자열, 입력  (0) 2019.03.18
[C++] 정보은닉과 캡슐화  (0) 2019.03.13
[C++] 객체지향 프로그래밍  (0) 2019.03.13
[C++] 클래스  (0) 2019.03.08