DNF LOVE

[C++문법] 생성자와 소멸자 그리고 접근자와 getter, setter 소멸자 그리고 접근자와 getter, setter 함수 본문

Programming/C++

[C++문법] 생성자와 소멸자 그리고 접근자와 getter, setter 소멸자 그리고 접근자와 getter, setter 함수

botho 2019. 10. 23. 21:27
반응형

생성자란? 객체를 생성할 때 자동적으로 호출되는 함수로 클래스와 같은 이름의 형태를 띈 함수이며, 리턴형이 없고 리턴 하지도 않는 특징을 갖고 있다. 

생성자는 객체를 생성과 동시에 초기화를 해주기 위해서 필요하다.

- 디폴트 생성자, 인자가 있는 생성자, 복사 생성자 세 가지 종류가 있다.

1. 생성자와 getter, setter 함수

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

class Person {
private :
	string name;
	int age;
public:
	Person() { // 인자 없는 생성자
		this->name = "";
		this->age = 0;
	}
	Person(string name, int age) { // 인자 있는 생성자
		this->name = name;
		this->age = age;
	}
	Person(const Person& p) { // 복사 생성자
		name = p.name;
		age = p.age;
	}

	// Getter
	string getName() { return name; }
	int getAge() { return age; }

	// Setter
	void setName(string name) {
		this->name = name;
	}
	void setAge(int age) {
		this->age = age;
	}

};


int main() {

	Person p1; // 인자 없는 객체
	Person p2("김아무개", 15);

	p1.setName("이아무개");
	p1.setAge(20);

	Person p3 = p1; // 복사 생성자

	cout << "p2의 이름 " << p2.getName() << endl;
	cout << "p1이자 p3의 나이 " << p3.getAge() << endl;

	return 0;
}

 

2. 소멸자 : 소멸자는 객체가 메모리 반환을 위하여 객체 소멸 시 자동 호출되는 함수이다. 클래스 이름 앞에 ~가 붙는다. 리턴하지 않고 리턴 타입도 없다. 전달인자는 항상 void이며 오버로딩, 디폴트 매개변수의 선언이 불가능하다.

class OOP {
public :
	int *arr;
	OOP(int arrSize) {
		arr = new int[arrSize];
	}
	~OOP() {
		// 소멸자
		delete[] arr;
		arr = NULL;
	}

};


int main() {
	int size = 15;

	OOP o(size);

	return 0;
}

** 객체가 소멸되는 시점 : 객체가 함수 내에 선언된다고 하면, 함수 호출이 끝나면 소멸되게 된다.

** 객체 생성(생성자 호출) -> 함수 종료 -> 소멸자 호출 -> 메모리 반환

** 소멸자 호출을 메모리 반환보다 먼저 해주는 이유는 이렇게 해줌으로써 메모리가 반환되어질 때 반환되어지지 않은 메모리 공간을 명시적으로 반환해주기 떄문이다.

반응형