본문 바로가기
OLD/[C++]개념정리

[개탱][C++][static][static data member][class][static function]

by 개탱 2018. 1. 2.
728x90

일반 data member는 객체마다 하나씩 만들어진다.

ㄴ 각 클래스내부에서든 함수에서든 변수가 정의가 될때 일반 변수들은 정의가 될 때마다 메모리공간에 하나씩 할당이 된다


static data member 는 공통적인 객체에 대해서는 단 하나만 만들어진뒤 유지된다.

 ㄴ 어떤 클래스, 함수든 같은 클래스, 함수에 대해서 정의가 되는순간 한번만 정의가 된 뒤 (메모리 공간에 한번만 할당) 계속 그 변수만(메모리 공간만) 사용한다.

 static data member

1
2
3
4
5
6
class X {
    int a;
    int b;
    static int c;
    static int MAX;
};
cs

일반 data member

1
2
3
4
5
6
class X {
    int a;
    int b;
    int c;
    int MAX;
};
cs


 

1
2
3
4
5
6
7
8
9
10
11
class X {
    int a;
    int b;
    static int c;
    static int MAX;
};
void main()
{
    X p;
    X q;
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
class X {
    int a;
    int b;
    int c;
    int MAX;
};
void main()
{
    X p;
    X q;
}
cs
 

static data member 사용하는 이유


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class X {
    int a;
    int b;
    static int c;
    static int MAX;
public:
    X(int x, int y)
    {
        a = x;
        b = y;
    }
 
};
 
int X::MAX = 100;
cs


 ㄴ #define MAX 100 처럼도 사용 가능 ( 
 매크로 대신에 사용함. )

 ㄴ 특정 클래스를 위한 전역변수 처럼도 사용가능 

( 어떠한 객체의 갯수 count 를 위해 n을 전역으로 만들고  위의 int X::MAX = 100 처럼 int X::count = 0 이렇게 만들고 생성자에서 n++식으로 사용가능)

 ㄴ 현재 위상태에서 C 와 MAX 는 private 상태임 ( 내부 public private 등등의 방식도 다 적용 )


똑같이 함수에도 적용가능 

 ㄴ C랭기지 전역함수를 클래스안에 배치할 때 // static int add(int x, int y)

 ㄴ static data member 를 엑세스 하기 위해서 ( static data member 내용을 불러오거나 변경이 필요할 때 )


1
2
3
4
static void SetC(int i)
{
    c = i;
}
cs

 ㄴ static function 에서는 내부의 일반 data member 의 변수에 접근&수정 불가능

(static function 에는 this라는 개념이 없기 때문에 일반 변수의 주인을 알 수 없어서 접근이 불가능하다)


 ㄴ 하지만 일반 function 에서는 static data member 의 변수에 접근&수정 가능

(일반 function 에서 전역(정적)static 변수는 이하 생략 - )


전역(static)으로 만들어진 변수 & 함수를  호출할때는 클래스명 :: 변수&함수명 으로 사용


c나 MAX의 값을 호출&사용할 때

X::c 또는 X::MAX 로 호출가능.

함수역시 X::SetC(10) 이런식으로 호출&사용 가능


1
2
3
4
X::c = 100;
X::MAX;
 
X::SetC(10);
cs


댓글