Publish:

ํด๋ž˜์Šค์—์„œ this์˜ ์˜๋ฏธ ์ƒ์„ฑ์ž ๋ณต์‚ฌ์ƒ์„ฑ์ž ์ด๋™์ƒ์„ฑ์ž ์†Œ๋ฉธ์ž static (+ ์‹ฑ๊ธ€ํ†ค)

ํด๋ž˜์Šค

ํด๋ž˜์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ

ํด๋ž˜์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ํฌ๊ธฐ์™€ ๋™์ผํ•˜๋‹ค.
๋ฉค๋ฒ„ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
๋‹จ, ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜จ๋‹ค.

๊ธฐ๋ณธ ์ƒ์„ฑ์ž, ์†Œ๋ฉธ์ž (+ this)

์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž๋Š” ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜์ด๋‹ค.
๋ฐ˜ํ™˜ ํƒ€์ž… ์—†์ด, ์ด๋ฆ„๊ณผ ์ธ์ž๋งŒ์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.
์ƒ์„ฑ์ž๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์†Œ๋ฉธ์ž๋Š” ์ธ์ž ์—†๋Š” ํ˜•ํƒœ๋งŒ ์กด์žฌํ•œ๋‹ค.

  • ์ƒ์„ฑ์ž: ์ด ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ ๋˜๋Š” ํ•จ์ˆ˜.
  • ์†Œ๋ฉธ์ž: ์ด ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ ๋˜๋Š” ํ•จ์ˆ˜.

ํด๋ž˜์Šค์—์„œ this์˜ ์˜๋ฏธ

ํด๋ž˜์Šค์˜ ์ผ๋ฐ˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜(์ผ๋ฐ˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜, ์ƒ์„ฑ์ž, ์†Œ๋ฉธ์ž) ๋‚ด๋ถ€์—์„œ๋Š” this๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
this๋Š” ์ž๊ธฐ ์ž์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ด๋‹ค.
test1.Output(); ์ด๋Ÿฐ์‹์œผ๋กœ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ
ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ this๋Š” test1์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ ,
test2.Output(); ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ this๋Š” test2์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

๐Ÿ’ก ๋ฉค๋ฒ„ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์•ž์— this-> ๊ฐ€ ์ƒ๋žต๋œ ๊ฒƒ์ด๋‹ค.

// printf(โ€œthis Test = %pโ€, &this); // &this ๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚จ. this๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹˜. ๋งŒ์•ฝ ๋ณ€์ˆ˜์˜€๋‹ค๋ฉด, sizeof ํด๋ž˜์Šค ํฌ๊ธฐ ๊ตฌํ–ˆ์„ ๋•Œ this์˜ ๋ณ€์ˆ˜ ํฌ๊ธฐ๊นŒ์ง€ ํฌํ•จ๋˜์–ด ๊ณ„์‚ฐ๋˜์—ˆ์„ ๊ฒƒ.

// ์ง์ ‘ ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด, ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ nullptr ๋กœ ์ดˆ๊ธฐํ™” ํ–ˆ์„ ๊ฒฝ์šฐ, ์—๋Ÿฌ๊ฐ€ ๋‚จ. this๋Š” nullptr ์ด๋‹ˆ๊นŒ. // (printf(โ€œAttack : %dโ€, mAttack); ํ˜น์€ this->mAttack ~~~ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๋Š” ์†Œ๋ฆฌ)

memset

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ค„ ๋•Œ ์‚ฌ์šฉ.
๋‹จ, ์ฑ„์šฐ๋Š” ๋‹จ์œ„๋Š” โ€˜1๋ฐ”์ดํŠธ ๋‹จ์œ„โ€™๋กœ ๊ฐ’์„ ์ฑ„์›Œ์ค€๋‹ค!
1๋ฒˆ ์ธ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ, 2๋ฒˆ ์ธ์ž์˜ ๊ฐ’์œผ๋กœ, 3๋ฒˆ ์ธ์ž์˜ ํฌ๊ธฐ๋งŒํผ ์ฑ„์›Œ์ค€๋‹ค.
memset(mArray, 0, sizeof(int) * 10);

1
2
int number = 10;
memset(&number, 1, sizeof(int));	// ๊ฒ๋‚˜ ํฐ ๊ฐ’ ๋‚˜์˜ด.

memset์€ โ€˜1๋ฐ”์ดํŠธ ๋‹จ์œ„โ€™๋กœ ๊ฐ’์„ ์ฑ„์šฐ๊ฒŒ ๋จ.
int๋Š” 4๋ฐ”์ดํŠธ ์ด๋ฏ€๋กœ 1๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ฑ„์šฐ๊ฒŒ ๋˜๋ฉด
| 0000 0001 | 0000 0001 | 0000 0001 | 0000 0001 |
์ด๋ ‡๊ฒŒ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด์„œ.

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// main.cpp

struct FPlayer
{
	char	Name[32] = {};
	int		Attack = 0;
};

class CTest
{
public:
    CTest()	:               // ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ด์šฉํ•ด์„œ ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
		mAttack(20),
		mDefense(10)
    {
        // ์•„๋ž˜๋Š” mAttack ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ์ด ๋œ ํ›„์— 50์„ ๋Œ€์ž…ํ•œ๋‹ค.
        mAttack = 50;

        memset(mArray, 0, sizeof(int) * 10);
        printf("CTest ์ƒ์„ฑ์ž\n");
    }

    ~CTest()
    {

    }

    // CTest test2("๋ฐ”๋ณด"); ์ด ์ค„์—์„œ ํ˜ธ์ถœ๋˜๋„๋ก ๋งŒ๋“  ์ƒ์„ฑ์ž์ง€๋งŒ, 
    // ์ด๋‹ˆ์…œ๋ผ์ด์ € mName(Name) ๋˜๋Š” ์ƒ์„ฑ์ž ๋‚ด๋ถ€์— mName = Name; ์œผ๋ก  ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Œ.
    CTest(const char* Name)	:
	    mAttack(30),
	    mDefense(40)
    {
	    printf("CTest const char* ์ƒ์„ฑ์ž\n");
    }

    void Output()
    {
        printf("this = %p\n", this);
        printf("๊ณต๊ฒฉ๋ ฅ : %d\n", mAttack);
        printf("๋ฐฉ์–ด๋ ฅ : %d\n", this->mDefense);
        //printf("this Addr = %p\n", &this);            // <- ์—๋Ÿฌ.

    }

public:
	// ์ด ์•„๋ž˜๋กœ ๋‹ค๋ฅธ ์ ‘๊ทผ์ œ์–ด ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋‘ public์ด ๋œ๋‹ค.
	char	mName[32] = {};
	int		mAttack = 0;
	int*	mArray = nullptr;

private:
	int		mDefense = 0;
};

void OutputPlayer(FPlayer* Player)
{
	printf("๊ณต๊ฒฉ๋ ฅ : %d\n", Player->Attack);
}

int main()
{
    FPlayer	Player;                         // ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜ ์„ ์–ธ
    Player.Attack = 10;
    OutputPlayer(&Player);

    CTest test1, test2("์ด๋ฆ„");

    printf("test1 = %p\n", &test1);         // test1์˜ ์ฃผ์†Œ ์ถœ๋ ฅ
    printf("test2 = %p\n", &test2);         // test2์˜ ์ฃผ์†Œ ์ถœ๋ ฅ

    // Output ๋ฉค๋ฒ„ํ•จ์ˆ˜๋Š” test1๊ณผ test2 ๋ชจ๋‘ ๋™์ผํ•œ ์ฃผ์†Œ์˜ ํ•จ์ˆ˜๋ฅผ
    // ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉค๋ฒ„ํ•จ์ˆ˜์—์„œ ์ •ํ™•ํ•˜๊ฒŒ test1๊ณผ test2์˜
    // ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ธ์‹ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    test1.mAttack = 100;
    test1.Output();

    test2.mAttack = 300;
    test2.Output();

    return 0;
}
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
class CPlayer
{
	/*
	์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž๋Š” ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜์ด๋‹ค.
	๋ฐ˜ํ™˜ ํƒ€์ž… ์—†์ด ์ด๋ฆ„๊ณผ ์ธ์ž๋งŒ์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.
	์ƒ์„ฑ์ž๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์†Œ๋ฉธ์ž๋Š” ์ธ์ž ์—†๋Š” ํ˜•ํƒœ๋งŒ ์กด์žฌํ•œ๋‹ค.
	์ƒ์„ฑ์ž : ์ด ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ์ด ๋˜๋Š”
	ํ•จ์ˆ˜์ด๋‹ค.
	์†Œ๋ฉธ์ž : ์ด ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋  ๋•Œ ์ž๋™์œผ๋กœ
	ํ˜ธ์ถœ์ด ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
	*/
public:
	// ์ƒ์„ฑ์ž
	// ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ด์šฉํ•ด์„œ ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
	CPlayer()	:
		mAttack(20),
		mDefense(10)
	{
		// ์•„๋ž˜๋Š” mAttack ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ์ด ๋œ ํ›„์— 50์„ ๋Œ€์ž…ํ•œ๋‹ค.
		mAttack = 50;

		// ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ค„ ๋•Œ ์‚ฌ์šฉ
		// ๋‹จ, ์ฑ„์šฐ๋Š” ๋‹จ์œ„๋Š” '๋ฐ”์ดํŠธ ๋‹จ์œ„'๋กœ ๊ฐ’์„ ์ฑ„์›Œ์ค€๋‹ค!
		// 1๋ฒˆ ์ธ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ, 2๋ฒˆ ์ธ์ž์˜ ๊ฐ’์œผ๋กœ, 3๋ฒˆ ์ธ์ž์˜ ํฌ๊ธฐ๋งŒํผ ์ฑ„์›Œ์ค€๋‹ค.
		memset(mArray, 0, sizeof(int) * 10);
		printf("CPlayer ์ƒ์„ฑ์ž\n");
	}

	CPlayer(const char* Name)	:
		mAttack(30),
		mDefense(40)
	{
		printf("CPlayer const char* ์ƒ์„ฑ์ž\n");
	}

	/*
	๋ณต์‚ฌ์ƒ์„ฑ์ž : ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

	์ด๋™์ƒ์„ฑ์ž : ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ์˜ฎ๊ฒจ์ฃผ๋ฉด์„œ
	๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
	ํด๋ž˜์Šคํƒ€์ž…&&
	RValue ํƒ€์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

	int& test = number + 10;		// ์ž„์‹œ๊ฐ์ฒด ์ฐธ์กฐ ์•ˆ ๋จ
	int&& test = number + 10;		// ์ž„์‹œ๊ฐ์ฒด ์ฐธ์กฐ ๋จ
	*/

	/*
	์–•์€๋ณต์‚ฌ: ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•œ๋‹ค. ์ฃผ์†Œ๊ฐ’๊นŒ์ง€ ๋™์ผํ•˜๊ฒŒ. ๊ทธ๋ž˜์„œ ๋ณต์‚ฌํ•œ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, ๋ชจ๋‘ ์‚ญ์ œํ•œ๋‹ค๋ฉด-... ์‚ญ์ œํ•œ ๊ฑธ ๋˜ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋Š” ์ผ ๋ฐœ์ƒ
	๊นŠ์€๋ณต์‚ฌ: 
	*/

	CPlayer(const CPlayer& ref)
	{
		// ์–•์€ ๋ณต์‚ฌ. ref์— ๋“ค์–ด์˜จ ๊ฐ์ฒด๋ฅผ, this*๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ž„.
		// this*๋Š”, ๋ฐ‘์—์„œ ์ž‘์„ฑํ•œ .. CPlayer copyTest(Player1); ์—์„œ copyTest ๋ณ€์ˆ˜์ธ๊ฑฐ์ž„.
		//*this = ref;

		mArray = new int[10];

		// ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ์‚ฌ์šฉ.
		// 1๋ฒˆ ์ธ์ž์˜ ์ฃผ์†Œ์—, 2๋ฒˆ ์ธ์ž์˜ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ 3๋ฒˆ ์ธ์ž์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐ”์ดํŠธ ์ˆ˜ ๋งŒํผ์„ ๋ณต์‚ฌํ•ด์คŒ.
		// memcpy
		memcpy(mArray, ref.mArray, sizeof(int) * 10);

		/* ์ด๊ฒƒ๋ณด๋‹จ memcpy๋ฅผ...
		for (int i = 0; i < 10; i++)
		{
			mArray[i] = ref.mArray[i];
		}
		*/
	}

	// ์ด๋™์ƒ์„ฑ์ž. ์ด๊ฑฐ ์ƒ์„ฑํ•˜๋Š” ์ˆœ๊ฐ„, ์œ„์— ๋ณต์‚ฌ์ƒ์„ฑ์ž์—์„œ ์–•์€ ๋ณต์‚ฌ๋กœ ์ผ๋˜ *this = ref; ๋ฅผ ๋ชป์“ฐ๊ฒŒ ๋จ.
	// ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋˜๊ณ  ์ด๋Ÿฌ๋Š” ๋ถ€๋ถ„๋“ค ๋ฉด์ ‘์— ๋งŽ์ด ๋‚˜์˜จ๋‹จ๋‹ค.
	CPlayer(CPlayer&& ref)
	{

	}

	// ์†Œ๋ฉธ์ž
	~CPlayer()
	{
		printf("CPlayer ์†Œ๋ฉธ์ž\n");
	}

public:
	// ์ด ์•„๋ž˜๋กœ ๋‹ค๋ฅธ ์ ‘๊ทผ์ œ์–ด ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋‘ public์ด ๋œ๋‹ค.
	char	mName[32] = {};
	int		mAttack = 0;
	int*		mArray = nullptr;

private:
	int		mDefense = 0;

public:
	// ํด๋ž˜์Šค์˜ ์ผ๋ฐ˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜(์ผ๋ฐ˜๋ฉค๋ฒ„ํ•จ์ˆ˜, ์ƒ์„ฑ์ž, ์†Œ๋ฉธ์ž) ๋‚ด๋ถ€์—์„œ๋Š”
	// this๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
	// this๋Š” ์ž๊ธฐ ์ž์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ด๋‹ค.
	// Player1.Output() ์ด๋Ÿฐ์‹์œผ๋กœ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ
	// ์ด์šฉํ•ด์„œ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ Player1.Output() ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ํ˜ธ์ถœํ•˜๋Š”
	// ์ˆœ๊ฐ„ this๋Š” Player1์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  Player2.Output() ์œผ๋กœ
	// ํ˜ธ์ถœํ•˜๋ฉด ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ this๋Š” Player2์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
	// ๋ฉค๋ฒ„ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์•ž์— this-> ๊ฐ€ 
	// ์ƒ๋žต๋œ ๊ฒƒ์ด๋‹ค.
	void Output()
	{
		printf("this = %p\n", this);
		printf("๊ณต๊ฒฉ๋ ฅ : %d\n", mAttack);
		printf("๋ฐฉ์–ด๋ ฅ : %d\n", this->mDefense);
		//printf("this Addr = %p\n", &this);
	}

	void OutputTest()
	{
		printf("OutputTest Function\n");
	}
};

void OutputPlayer(FPlayer* Player)
{
	printf("๊ณต๊ฒฉ๋ ฅ : %d\n", Player->Attack);
}

int main()
{
	FPlayer	Player;

	Player.Attack = 10;

	OutputPlayer(&Player);

	CPlayer	Player1, Player2("์ด๋ฆ„");

	printf("Player1 = %p\n", &Player1);
	printf("Player2 = %p\n", &Player2);

	// Output ๋ฉค๋ฒ„ํ•จ์ˆ˜๋Š” Player1๊ณผ Player2 ๋ชจ๋‘ ๋™์ผํ•œ ์ฃผ์†Œ์˜ ํ•จ์ˆ˜๋ฅผ
	// ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉค๋ฒ„ํ•จ์ˆ˜์—์„œ ์ •ํ™•ํ•˜๊ฒŒ Player1๊ณผ Player2์˜
	// ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ธ์‹ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
	Player1.mAttack = 100;
	Player1.Output();

	Player2.mAttack = 300;
	Player2.Output();

	CPlayer* Player3 = nullptr;

	//Player3->Output();
	Player3->OutputTest();

	printf("Player Size = %d\n", sizeof(CPlayer));

	CPlayer copyTest(Player1);

	int number = 10;
	memset(&number, 1, sizeof(int));	// ๊ฒ๋‚˜ ํฐ ๊ฐ’ ๋‚˜์˜ด.
	// memset์€ 1๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ฑ„์šฐ๊ฒŒ ๋จ.
	// int๋Š” 4๋ฐ”์ดํŠธ ์ด๋ฏ€๋กœ 1๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ฑ„์šฐ๊ฒŒ ๋˜๋ฉด
	// 0000 0001 0000 0001 0000 0001 0000 0001 ... ์ด๋ ‡๊ฒŒ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด์„œ. 

	// ์ž„์‹œ ๊ฐ์ฒด ์ƒ์„ฑ. ์ด ์ค„์—์„œ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋˜๊ณ , ์ค„ ๋„˜์–ด๊ฐ€๊ธฐ ์ง์ „ ์†Œ๋ฉธ์ž ํ˜ธ์ถœ๋˜๋ฉฐ ์‚ฌ๋ผ์ง.
	CPlayer();

	CPlayer* test2 = new CPlayer(Player1);

	// std::move : ์ธ์ž์— ๋“ค์–ด์˜จ ๊ฐ์ฒด๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ํ•จ์ˆ˜.
	// CPlayer test2 = std::move(CPlayer());	<- ์ด๋™์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ


	return 0;
}

static, singleton

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>

class CStatic
{
	CStatic()
	{

	}

	~CStatic()
	{

	}

private:
	// ์ผ๋ฐ˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ,
	// static ์˜ ๊ฒฝ์šฐ, ์ด ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•œ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋œ๋‹ค.
	// ๋‹ค๋งŒ static ๋ฉค๋ฒ„ '๋ณ€์ˆ˜'๋Š”, ํด๋ž˜์Šค ์™ธ๋ถ€์— ์„ ์–ธ ๋ถ€๋ถ„์ด ํ•„์š”ํ•˜๋‹ค.
	int mNumber = 0;
	static int mNumberStatic;

public:
	int GetNumber() const
	{
		return mNumber;
	}

	static void OutputStatic()
	{
		// mNumber๋Š” static์ด ์•„๋‹˜. ๋น„์ •์  ๋ฉค๋ฒ„. ๊ทธ๋ž˜์„œ ์ •์ ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœ ์•ˆ๋จ.
		// ์ •ํ™•ํžˆ๋Š”, static ๋ฉค๋ฒ„ํ•จ์ˆ˜์—” this๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ. (๊ทธ์น˜๊ทธ์น˜.. ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•˜๋‹ˆ๊นŒ)
		// ๊ทธ๋ž˜์„œ CStatic static1; ํ•˜๊ณ  static1->OutputStatic(); ์ด๋‚˜, CStatic::OutputStatic(); ์ด๋‚˜ ๊ฐ™์Œ.
		// ๋‹ค๋งŒ ํŠน์ • static ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด - CStatic::OutputObject(&static1); ์ด๋ ‡๊ฒŒ.
		//printf("Number : %d\n", mNumber);
	}
};

// ํด๋ž˜์Šค์˜ static ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์„ ์–ธ.
int CStatic::mNumberStatic;


class CSingleton
{
public:
	CSingleton()
	{

	}

	~CSingleton()
	{

	}

	static CSingleton* GetInstance()
	{
		if (mInstance == nullptr)
		{
			mInstance = new CSingleton();
		}

		return mInstance;
	}

	static void Destroy()
	{
		if (mInstance)
		{
			delete mInstance;
			mInstance = nullptr;
		}
	}

public:


private:
	static CSingleton* mInstance;
};

CSingleton* CSingleton::mInstance = nullptr;


int main()
{
	CSingleton::GetInstance();

	CSingleton::Destroy();

	return 0;
}

์ด์Šˆ ๋ฐ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ๊ธฐ๋กํ•ด๋‘๋Š” ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€, ํ”ผ๋“œ๋ฐฑ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‚

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ