๋ชฉ๋ก๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/C++ (38)

๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[๊ฐ์ฒด์˜ ์ฐธ์กฐ, ๋ณต์‚ฌ ์ƒ์„ฑ์ž] ์ฐธ์กฐ reference ๋ณ€์ˆ˜

๐Ÿ ์ฐธ์กฐ reference ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด * ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด & ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณ„๋ช… (alias) โ˜‘๏ธ ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ (์›๋ณธ ๋ณ€์ˆ˜๋กœ ์ง€์นญ) ์— ๋Œ€ํ•œ ๋ณ„๋ช… ์ฐธ์กฐ์ž & ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ, ์„ ์–ธ ์‹œ ๋ฐ˜๋“œ์‹œ ์›๋ณธ ๋ณ€์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๋ฉด ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ด๋ฆ„๋งŒ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ณ„๋„์˜ ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐํ™”๋กœ ์ง€์ •๋œ ์›๋ณธ ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค โ˜‘๏ธ์ฐธ์กฐ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ํฌ๋‹ˆํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ refn.setRadius(30) ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค ์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค int *p = &refn; โ˜‘๏ธ์ฐธ์กฐ ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ ์ดˆ๊ธฐํ™”๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค ์ฐธ์กฐ..

[๊ฐ์ฒด์˜ ์ฐธ์กฐ, ๋ณต์‚ฌ ์ƒ์„ฑ์ž] ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ฐ์ฒด ์ „๋‹ฌ

๐Ÿ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ฐ์ฒด ์ „๋‹ฌ โ˜‘๏ธ 1) ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ ๊ณผ์ • ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋„ ์‹ค์ธ์ž (์›๋ณธ ๊ฐ์ฒด) ๋ฅผ ํ›ผ์†์‹œํ‚ค์ง€ ์•Š๋Š” ์žฅ์  ์‹ค์ธ์ž ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉด ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ์‹œ๊ฐ„์ด ์ปค์ง€๋Š” ๋‹จ์  ๊ฐ์ฒด๊ฐ€ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋ฉด, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒํ•˜๋ฉด ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋œ๋‹ค ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰๋˜๋Š”๊ฐ€? -> ์•„๋‹ˆ๋‹ค ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ C++ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์†Œ๋ฉธ์ž๋งŒ ์‹คํ–‰๋˜๋„๋ก ์ปดํŒŒ์ผ ํ•œ๋‹ค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค ์†Œ๋ฉธ์ž์˜ ๊ฒฝ์šฐ๋Š” ๋‹ค๋ฅด๋‹ค ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋˜์ง€ ใ…‡๋‚ณ๊ณ  ์†Œ๋ฉธ์ž๋งŒ ์‹คํ–‰๋˜๋Š” ๋น„๋Œ€์นญ ๊ตฌ์กฐ๋Š”, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์›๋ณธ ๊ฐ์ฒด์˜ ์ƒํƒœ..

[๊ฐ์ฒด์˜ ์ฐธ์กฐ, ๋ณต์‚ฌ ์ƒ์„ฑ์ž] ํ•จ์ˆ˜์˜ ์ธ์ž ์ „๋‹ฌ ๋ฐฉ์‹

๐Ÿ ํ•จ์ˆ˜์˜ ์ธ์ž ์ „๋‹ฌ ๋ฐฉ์‹ โ˜‘๏ธ 1) ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ (call by value) ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ์—์„œ ๋„˜๊ฒจ์ฃผ๋Š” ์‹ค์ธ์ž ๊ฐ’์ด ํ•จ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹ ์‹ค์ธ์ž์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ „๋‹ฌํ•˜๋ฏ€๋กœ, ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‹ค์ธ์ž๋ฅผ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์—†๋Š” ์žฅ์ ์ด ์žˆ๋‹ค ๋งค๊ฐœ ๋ณ€์ˆ˜ a, b ๊ฐ€ swap() ํ•จ์ˆ˜์˜ ์Šคํƒ์— ์ƒ์„ฑ๋˜๊ณ , m, n ๊ฐ’์ด a, b์— ๋ณต์‚ฌ๋œ๋‹ค a์™€ b๊ฐ’์ด ์„œ๋กœ ๊ตํ™˜๋˜๊ณ , swap() ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒํ•˜๋ฉด swap() ์Šคํƒ๊ณผ ํ•จ๊ป˜ a, b ๋„ ์‚ฌ๋ผ์ง€์ง€๋งŒ main() ์Šคํƒ์— m, n ์€ ๋ณ€ํ•จ์—†์ด 2, 9 ๊ฐ’์„ ์œ ์ง€ํ•œ๋‹ค // ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ๋กœ swap ํ•จ์ˆ˜ ํ˜ธ์ถœ #include using namespace std; void swap(int a, int b) { int tmp; tmp = a; a = b; b = ..

[๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ ๊ฐ์ฒด ๋ฐฐ์—ด, ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ] this ํฌ์ธํ„ฐ์™€ string ๋ฌธ์ž์—ด ์‚ฌ์šฉ

๐Ÿ this ํฌ์ธํ„ฐ โ˜‘๏ธ this ๋Š” ๊ฐ์ฒด ์ž์‹ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค this ๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋„ ์•„๋‹ˆ๊ณ  ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ์ง€์—ญ ๋ณ€์ˆ˜๋„ ์•„๋‹ˆ๋‹ค this ๋Š” ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฃผ์†Œ์ด๋‹ค โ˜‘๏ธ this ์™€ ๊ฐ์ฒด this ๋Š” ๊ฐ์ฒด ์ž์‹ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ this-> ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ โ˜‘๏ธthis ์˜ ํ•„์š”ํ•œ ๊ฒฝ์šฐ 1) ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ง“๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ•๋ ฅํ•œ ์ฃผ์„ ์—ญํ• ์ด๋‹ค 2) ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜์—์„œ ๊ฐ์ฒด ์ž์‹ ์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค ์—ฐ์‚ฐ์ž ์ค‘๋ณต์„ ๊ตฌํ˜„ํ•  ๋•Œ, ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค โ˜‘๏ธthis ์˜ ์ œ์•ฝ ์กฐ๊ฑด this ๋Š” ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜์—์„œ..

[๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ ๊ฐ์ฒด ๋ฐฐ์—ด, ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ] ๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ new delete ๋™์  ์ƒ์„ฑ ๋ฐ ํ• ๋‹น๊ณผ ๋ฐ˜ํ™˜

๐Ÿ ๊ฐ์ฒด ํฌ์ธํ„ฐ ์„ ์–ธ ๋ฐ ํ™œ์šฉ โ˜‘๏ธ ๊ฐ์ฒด ํฌ์ธํ„ฐ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ฝ๊ณ  ๊ฐ’์„ ์“ฐ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค โ˜‘๏ธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ Circle *p; โ˜‘๏ธํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๊ฐ์ฒด ์ฃผ์†Œ ์ง€์ • ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ๊ฐ์ฒด ์ด๋ฆ„ ์•ž์— & ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค p = &donut; โ˜‘๏ธํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ๋ฉค๋ฒ„ ์ ‘๊ทผ ๊ฐ์ฒด ์ด๋ฆ„์œผ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ์ (.) ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค d = donut.getArea(); ๊ฐ์ฒด ํฌ์ธํ„ฐ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•  ๋•Œ -> ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค d = p -> getArea(); d = (*p).getArea(); // ๊ฐ์ฒด ํฌ์ธํ„ฐ ์„ ์–ธ ๋ฐ ํ™œ์šฉ #include using namespace std; class Circle { int radius; public: Circle() {..