๊ด€๋ฆฌ ๋ฉ”๋‰ด

๊ตฌ๋ฆ„

[C++11/14][1-1]this call ๋ณธ๋ฌธ

๐Ÿ‘จ‍๐Ÿ’ป๊ฐœ๋ฐœ (deprecated)

[C++11/14][1-1]this call

rattan32 2016. 7. 31. 23:53

C++ ์—์„œ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ณผ์ •์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, Point ํด๋ž˜์Šค์— set ํ•จ์ˆ˜, foo static ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

C++ ์—์„œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ์ •์˜ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ this ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ void set(int a, int b) ๋Š” void set(Point* const this, int a, int b) ์™€ ๊ฐ™์œผ๋ฉฐ

๋ฉค๋ฒ„ํ•จ์ˆ˜ ๋‚ด์˜ x = a; y = b; ์—ญ์‹œ ์ปดํŒŒ์ผ ํƒ€์ž„์— this->x = a; this->y = b; ์™€ ๊ฐ™์ด ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ static ํ•จ์ˆ˜๋Š” this ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋ฐ์š”,

static void foo(int a) ๋Š” this ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ void(int a) ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉค๋ฒ„๋ณ€์ˆ˜์ธ x ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋ฉฐ 

์ปดํŒŒ์ผ์‹œ ์—๋Ÿฌ๊ฐ€ ๋œจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

this ๋ฅผ ์ธ์ž๋กœ ๋„ฃ์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ, 21๋ฒˆ์งธ ์ค„ ๊ณผ ๊ฐ™์ด ๊ฐ์ฒด ์—†์ด๋„ static ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฐ”๊พธ์–ด ๋ณด๋ฉด


์ด๋ฒˆ์—๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜(23๋ฒˆ์งธ ์ค„) ์„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฐ”๊พธ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € p1.set(10, 20); ์ด set(&p1, 10, 20); ์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.


1. ๋ฉค๋ฒ„ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์›๋ฆฌ

   ๊ฐ์ฒด๊ฐ€ ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž(this) ๋กœ ์ถ”๊ฐ€๋œ๋‹ค. - this call

   ์ •ํ™•ํžˆ๋Š” ecx ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ „๋‹ฌ๋จ.


2. static ํ•จ์ˆ˜์—๋Š” this๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์—†์ด ํ•จ์ˆ˜ํ˜ธ์ถœ์ด ๋œ๋‹ค.

   ๊ฐ™์€ ์ด์œ ๋กœ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.


Comments