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;
}
|
'C' 카테고리의 다른 글
c++ class function overloading, 연산자(operator) 임의 지정 (0) | 2021.06.23 |
---|---|
C++ class copy move constructor, instructor (0) | 2021.06.23 |
c++ object memory alignment (0) | 2021.06.23 |
c++ copy elison, Retrun value optimization (0) | 2021.06.23 |
c++ lvalue rvalue zero copy (0) | 2021.06.23 |