반응형
Notice
Recent Posts
Recent Comments
Link
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;
}
** 객체가 소멸되는 시점 : 객체가 함수 내에 선언된다고 하면, 함수 호출이 끝나면 소멸되게 된다.
** 객체 생성(생성자 호출) -> 함수 종료 -> 소멸자 호출 -> 메모리 반환
** 소멸자 호출을 메모리 반환보다 먼저 해주는 이유는 이렇게 해줌으로써 메모리가 반환되어질 때 반환되어지지 않은 메모리 공간을 명시적으로 반환해주기 떄문이다.
반응형
'Programming > C++' 카테고리의 다른 글
[C++문법] Class, 추상 클래스, 인터페이스 상속 등 사용하기 (0) | 2019.10.23 |
---|---|
c++ 문법> 반복자 Iterator(Vector를 사용하여 예제) (0) | 2019.10.23 |
C++> STL(Standard Template Libary) Contains (0) | 2019.10.23 |
C++ STL> Vector Container 에 대해 알아보자.(2차원 vector 사용) (0) | 2019.10.23 |
C++문법> STL의 string에 대해 알아보자. (string과 char 배열과의 차이) (0) | 2019.10.23 |