도서 : 초보자를 위한 C++ 프로그래밍(성안당)
지음 : 강성수 지음
- 객체 생성
- 클래스명 객체명; //객체 생성
- 객체 멤버 접근하여 사용하기
- 객체명.멤버변수;
- 객체명.멤버함수();
- 실습 - 개에 관한 클래스(public으로 멤버 변수 공개)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
#include <iostream>
using namespace std;
class Dog {
public: // 범용(외부 공개)구역
int age; //멤버 변수 선언
int weight;
void show(); //멤버 함수 선언, 함수 원형 선언
};
void Dog::show() {
cout << "나이 : " << age << endl;
cout << "몸무게 : " << weight << endl;
}
int main() {
Dog happy; //객체 happy 생성
happy.age = 3;
happy.weight = 5;
happy.show();
return 0;
} |
cs |
- 결과
- 멤버 변수를 public으로 선언하지 말고, private로 선언하여 비공개(캡슐화)하는 것을 권장한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
#include <iostream>
using namespace std;
class Dog {
private: // 범용(외부 공개)구역
int age; //멤버 변수 선언
int weight;
public:
void setage(unsigned int x) { age = x; }
void setweight(unsigned int y) { weight = y; }
int getage() { return age; }
int getweight() { return weight; }
void show(); //멤버 함수 선언, 함수 원형 선언
};
void Dog::show() {
cout << "나이 : " << age << endl;
cout << "몸무게 : " << weight << endl;
}
int main() {
Dog happy; //객체 happy 생성
happy.setage(2);
happy.setweight(3);
happy.show();
return 0;
} |
cs |
- 결과
- 클레스에서 정보는 멤버 변수로 처리하며 기본적으로 private로 선언하여 비공개하는 것이 관례이다.
- age, weight에 접근하기 위해 getage(), getweight() 등의 함수를 구현하였다.
- 생성자와 소멸자
- 객체를 선언할 때 멤버 변수의 초기화는 생성자(Constructor)를 사용한다. 생성자는 다음과 같은 특징을 갖는다.
- 생성자가 속한 클래스 이름과 같은 이름을 갖는 특별한 함수
- 생성자는 리턴형이 없다. 그러나 메서드는 리턴형이 있다.
- 클래스의 인스턴스(객체)가 생성될 때마다 호출되어 객체를 초기화하는 함수이다.
- 생성자는 정적인 생성인 경우 객체를 정의(생성)할 때 호출되어 실행된다.
- 생성자는 동적인 생성(포인터)인 경우 new 연산자로 기억 장소를 할당할 때 실행된다.
- 소멸자(destructor)는 다음과 같은 특징을 갖는다.
- 클래스명과 같은 이름을 갖으며, 이름 앞에 틸드(~기호)가 붙는다.
- 자원의 뒷정리하는 것으로, 객체값을 소멸시키고 할당한 메모리도 해제한다.
- 소멸자는 정적인 생성인 경우 객체를 정의한 멤버 함수가 끝날 때 실행된다.
- 소멸자는 동적인 생성(포인터)인 경우 delete 연산자로 기억 장소를 해제할 때 실행된다.
- 소멸자의 실행 순서는 객체 생성 순서와 반대이다.
- 소멸자는 아주 특별한 경우가 아니면 사용자가 직접 호출할 필요가 없다.
- 생성자가 호출되는 시점은 멤버 함수나 main() 함수 속에서 객체를 정의할 때 발생하고, 소멸자는 객체를 정의한 지역 범위인 중괄호 밖으로 벗어나거나 delete 연산자로 할당한 자유 저장 공간에 있는 객체가 삭제될 때 자동으로 호출되어 실행된다.
- 기본 생성자는 멤버 변수 초기화
- 클래스 내에서 private로 선언한 멤버 변수들은 값이 초기화 되지 않은 상태이다. 따라서 이를 초기화 시켜주기 위해 클래스 이름과 동일한 이름의 함수를 선언해준다.
- 그 함수내에서 멤버 변수를 초기화한다.
- ex) class Dog -> Dog::Dog()
- 하나의 클래스에 두 개 이상의 생성자를 만들 수 있다. 즉 생성자도 함수이므로 오버로드(다중 정의)를 지원한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
class Dog {
private: // 범용(외부 공개)구역
int Age; //멤버 변수 선언
int Weight;
public:
Dog();
Dog(int age, int weight);
void show(); //멤버 함수 선언, 함수 원형 선언
};
Dog::Dog(){
Age = 3;
Weight = 3;
}
Dog::Dog(int age, int weight){
Age = age
Weight = weight
} |
cs |
- 객체 뒷정리 작업하는 소멸자
- 소멸자(Destructor)는 더 이상 객체를 사용하지 않을 때 객체를 제거하여 작업을 정리하는 것으로, 생성자의 반대 역할(자유 메모리 공간에 있는 객체가 삭제될 때 객체값을 소멸시키고 할당한 메모리도 해제하는 것)을 하며, 객체가 유효 범위(지역 범위 밖으로 나가는 순간)를 벗어날 때 자동으로 호출하는 메서드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
#include <iostream>
using namespace std;
class Dog {
private: // 범용(외부 공개)구역
int age; //멤버 변수 선언
int weight;
public:
void setage(unsigned int x) { age = x; }
void setweight(unsigned int y) { weight = y; }
int getage() { return age; }
int getweight() { return weight; }
void show(); //멤버 함수 선언, 함수 원형 선언
~Dog();
};
void Dog::show() {
cout << "나이 : " << age << endl;
cout << "몸무게 : " << weight << endl;
}
Dog::~Dog() { //소멸자 정의(구현)
cout << "소멸자가 자동 호출됨\n";
}
int main() {
Dog happy; //객체 happy 생성
happy.setage(2);
happy.setweight(3);
happy.show();
return 0;
} |
cs |
- 결과