본문 바로가기
카테고리 없음

C++ class(클래스)

by 리승연 2018. 9. 15.
반응형

C++에서 클래스란?

객체를 정의하는 틀 혹은 설계도로서, 클래스에서 멤버함수와 멤버 변수를 선언한다. 여기서 객체는 멤버변수와 맴버함수로 구성된다. 멤버 변수는 객체의 상태를 나타내는 속성이고, 멤버 함수는 행동을 구현한 코드이다.

클래스=선언부+구현부

클래스 선언부

클래스는 class 키워드와 클래스 이름으로 선언한다. 클래스 이름은 개발자가 원하는 대로 붙이면 된다. '{'와 '}'로 감싸며 마지막에 반ㄷ시 ';' 붙여야한다.

1
2
3
4
class Obj { //Obj 이름의 클래스 선언
    ...
};//반드시 세미콜론(;)으로 종료
 
cs

 

클래스 멤버

클래시의 멤버는 변수와 함수로 구성된다. 멤버 변수는 클래스 선언부에서 초기화 불가능하다.

멤버 함수는 원형 형태로 선언, 리턴 타입, 매개 변수 리슽 등 모두 선언되어야 한다.

double getObj();

 

클래스 구현부

클래스 선언부에 선언된 멤버 함수의 코드를 구현한다.

 

1
2
3
double Obj::getObj() {
    return 3.14*radius*radius;
}
cs

클래스 선언과 구현의 분리는 왜?

클래스의 재사용을 위해서이다. 클래스를 사용하고자 하는 다른 C++ 파일에서는 컴파일 시 클래시의 선언부만 필요하기 때문이다.

 

생성자

●생성자의 목적은 객체가 생성될 때 초기 작업을 위함이다.

●생성자 함수는 한 번만 실행한다.

●생성자 함수의 이름은 클래스의 이름과 동일하게 작성한다.

●생성자 함수의 원형에 리턴 타입을 선언하지 않는다.

●생성자는 중복 가능하다.

 

기본 생성자(default constructor)

기본 생성자란 디폴드 생성자라고도 부르며, 매개 변수 없는 생성자를 말한다.

 

소멸자

●소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위해서이다.

●소멸자의 이름은 클래스 이름 앞에 ~를 붙인다.

●소멸자는 리턴 타입이 없으며 어떤 값도 리턴해서도 안 된다.

●소멸자는 한 개만 존재하며 매개 변수를 가지지 않는다.

●소멸자가 선언되어 있지 않으면 기본 소멸자(default dectructor)가 자동으로 생성된다.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 예제
#include <iostream> winkitee
using namespace std;
/*
    접근지정자
    1. private: 외부에서 접근 불가능
                단, friend 접근가능 //JAVA로 넘어가면서 friend는 없어짐
    2. protected: 상속받은 외부에서만 접근가능
    3. public: 아무나
 
    클래스의 구성요소
    1. 맴버변수,필드: 주로 private
    2. 생성자함수: public
        1) 기능: 객체등록, 필드초기화
        2) 오버로딩이 가능(명시적, 암시적 둘다 가능)
        3) const member function로 만들수 없음
        4) 디폴드생성자를 명시적으로 구현할 경우 디폴트생성자는 사라진다.
        5)  객체생성시 자동호출
    3. 멤버함수,메소드: public
        :외부에서 필드를 사용하게 하기 위한 기능
 
        
    4. 복사생성자
    5. 소멸자
        1) 객체소멸시 자동호출
        2) 객체당 1개씩
        3) 객체  등록 해제
        4) 객체 소멸시 객체 잔여메모리 정리(객체 사라진 시점에서 객체 마무리 하겟다는 것)
        6) 생성자와 동일하지만 함수명앞에 ~(틸트)가 붙음
        7) 오버로딩 불가능
        8)const member function 만들수 없음-초기화 메모리 해제->값을 바꾼다는 것.
        9)virtual 함수로 꼭 만들어서 사용해라.(동적바인디를 위해서 )
    6. 대입연산자함수
    2,4,5,6 항상 디폴트로 존재
*/
 
/*
    this pointer: 
        메소드의 첫번째 매개변수 
*/
 
class Obj {
 
    //디플드생성자
public :
    Obj() { cout << "생성자"; };
 
    //복사생성자
    //소멸자
    //대입연산자호출
};
 
void main() //외부함수
{
    Obj obj; //객체선언 -> 생성자호출
    Obj *= new Obj;
    //Obj *ob = (Obj*)calloc(1, sizeof(Obj));
 
    delete p;
}  
결과 
 winkitee           Colored by Color Scripter
cs

 

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 Obj {
private:
    int a;
 
public:
    //Obj() { cout << "생성자"; };
    Obj() { this->= 0; };
    ~Obj() { cout << "소멸자"; }; //소멸자함수 디폴드는 자신 사용하지 않을 경우만 .!
 
    Obj(int a) {
        this->= a; winkitee
    }
 
    void setA(int a) { //void setA(Obj *this int a)
        this->= a;
    }
 
    int getA(int a) {
        return a;
    }
};
 
void main() {
    Obj *= new Obj;
    delete p;
}//소멸자  
●결과 
    
winkitee     Colored by Color Scripter
cs
반응형