도서 : 초보자를 위한 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
  • 결과

  1. 클레스에서 정보는 멤버 변수로 처리하며 기본적으로 private로 선언하여 비공개하는 것이 관례이다.
  2. age, weight에 접근하기 위해 getage(), getweight() 등의 함수를 구현하였다.

  • 생성자와 소멸자
    • 객체를 선언할 때 멤버 변수의 초기화는 생성자(Constructor)를 사용한다. 생성자는 다음과 같은 특징을 갖는다.
      1. 생성자가 속한 클래스 이름과 같은 이름을 갖는 특별한 함수
      2. 생성자는 리턴형이 없다. 그러나 메서드는 리턴형이 있다.
      3. 클래스의 인스턴스(객체)가 생성될 때마다 호출되어 객체를 초기화하는 함수이다.
      4. 생성자는 정적인 생성인 경우 객체를 정의(생성)할 때 호출되어 실행된다.
      5. 생성자는 동적인 생성(포인터)인 경우 new 연산자로 기억 장소를 할당할 때 실행된다.
    • 소멸자(destructor)는 다음과 같은 특징을 갖는다.
      1. 클래스명과 같은 이름을 갖으며, 이름 앞에 틸드(~기호)가 붙는다.
      2. 자원의 뒷정리하는 것으로, 객체값을 소멸시키고 할당한 메모리도 해제한다.
      3. 소멸자는 정적인 생성인 경우 객체를 정의한 멤버 함수가 끝날 때 실행된다.
      4. 소멸자는 동적인 생성(포인터)인 경우 delete 연산자로 기억 장소를 해제할 때 실행된다.
      5. 소멸자의 실행 순서는 객체 생성 순서와 반대이다.
    • 소멸자는 아주 특별한 경우가 아니면 사용자가 직접 호출할 필요가 없다.
    • 생성자가 호출되는 시점은 멤버 함수나 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
    • 결과

 

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

const 객체  (0) 2019.03.03
new 연산자와 delete 연산자  (0) 2019.03.02
템플릿 함수  (0) 2019.03.02
inline 함수  (0) 2019.03.01
공용체  (0) 2019.03.01

+ Recent posts