본문 바로가기

C

static function, static variable

static variable은 object가 생성되었을때

object들이 stack 공간에 저장되는 반면에

static은 static 이라는 별도의 메모리에 저장 된다.

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
#include <iostream>
#include <array>
class Cat // 메모리를 32byte의 배수로 만든다
{
public:
    void speak()
    {
        count++;
        static int static_count = 0// Static variable in a function...
                                     // 더 안전함
        static_count++// 모든 객체에서 공유함
        std::cout << count << "meow" << std::endl;
        std::cout << static_count << "meow" << std::endl;
    };
    static void staticSpeak()
    {
        //count++;
        std::cout << "CAT!" << std::endl;
    };
    static int count;
private:
    int mAge;
};
// static 변수는 프로그램이 시작될 때 초기화 해 주어야 함
 
int Cat::count = 0;
 
Cat staticCat; // global variable(static 변수 역할)
 
int main()
{
    Cat kitty;
    Cat nabi;
 
    kitty.speak();
    nabi.speak();
    Cat::staticSpeak(); // Object를 만들지 않아도 Call 가능
    // static 함수는 object와 연관이 없다.
    // this 키워드와 관련(object의 address와 연동이 되어있지 않음.)
    // 하지만 static function은 mAge같은 object 내에 멤버 variable에 접근 또한 불가능함
    // speak() 같은 함수 또한 불러올 수 없음. (사실은 this->speak() 같은 방법으로 call을 한다.)
    kitty.staticSpeak(); // 이것은 가능함
    return 1;
 
 
    return 0;
}