반응형
안녕하세요. 훈츠입니다. 금일은 static 클래스와 지역 static 클래스에 관해 포스팅 합니다.
정적 클래스 (static class)
- 한번 생성과 초기화 ( 스태틱 메모리 영역에 저장)
- 프로그램이 종료될 때 까지 소멸되지 않는다.
- 정적 클래스를 객체화 하면 내용을 공유 한다.
형식 ( has - a 관계 )
- 클래스안에 A 클래스를 정적(static) 변수로 선언
- Main 함수 밖에서 선언 해야 하며 형식은 다음과 같습니다.
- A B::ClassA(10);
- 함수안에서 A 클래스를 정적(static) 변수로 선언
- void Set(int nVar { static A test(nVar);
예제 코드
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
61
|
//Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드///
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class A
{
//private:
//int m_nVar;
public:
int m_nVar;
A(int nVar) {
m_nVar = nVar;
cout<<"A생성자 호출 : " << m_nVar <<endl;
}
~A() {
cout << "A소멸자 호출 " << endl;
}
void Print() {
cout <<"A Print: "<< m_nVar << endl;
}
};
//클래스안에 정적 클래스
class B {
public:
static A ClassA;
B() { cout << "B생성자 호출 " << endl; }
~B() { cout << "B소멸자 호출 " << endl; }
};
//지역 함수안에 클래스
void Set(int nVar) {
static A test(nVar);
cout << "Set 함수호출 " << endl; //지역 클래스
}
A B::ClassA(10); //A 생성자 호출 10 (1번)
int main()
{
Set(5); //A 생성자 호출 (2번) // Set 함수 호출 (3번)
Set(20); //호출 안됨.
B test1, test2; //두개의 B 클래스의 test1, test2 인스턴스
test1.ClassA.Print(); //B 클래스의 test1 인스턴스지만 , A클래스의 (1번)에서 초기화된 10이 호출
test2.ClassA.Print(); //B 클래스의 test2 인스턴스지만 , A클래스의 (1번)에서 초기화된 10이 호출
test1.ClassA.Print(); //호출값이 같음.
test2.ClassA.Print(); //B 클래스의 test2 인스턴스지만 , A클래스의 (1번)에서 초기화된 10이 호출
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
예제 코드의 실행 결과를 보면 클래스에서 정적(static) 변수로 선언한것도, 함수안에서 정적(static) 변수로 선언한것도 모두 A 생성자 호출 :10, 5 한번씩만 호출되고, 그밑에 Set(20)은 이미 정적변수가 생성되었기 때문에 호출되지 않을것을 확인 할수 있습니다.
Has-a 관계로 정적변수로 선언후 사용할때는 한번의 생성과 초기화만 이루어 지기 때문입니다.
B test1, test2 또한 마찬가지로 두개의 인스턴스를 생성했지만 안에 있는 정적변수를 호출했기 때문에 결과값이 같은것을 확인 할수 있습니다.
'컴퓨터 언어 > C++' 카테고리의 다른 글
[C++] C++ 21일차 friend 변수와 friend 클래스 (0) | 2020.04.25 |
---|---|
[C++] C++ 20일차 static(정적) 멤버변수와 static(정적) 함수 (0) | 2020.04.24 |
[C++] C++ 18일차 오버로딩 4 (복사 생성자) (0) | 2020.04.22 |
[C++] C++ 17일차 오버로딩 3 (클래스 객체 복사시 주의사항) (0) | 2020.04.21 |
[C++] C++ 16일차 함수 오버로딩 2 (0) | 2020.04.20 |