Search

CPP Module 02

Created
2021/10/08
tag
42์„œ์šธ
42Seoul
CPP Module
All of C++98
Class
Orthodox Canonical Form

Subjects

โ€ข

1. Orthodox Canonical Form Fixed Point Class

Floating Point? Fixed Point? Fixed Point!

ex00 - ex02๊นŒ์ง€ ์š”๊ตฌํ•˜๋Š” ๋ฐ”๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค. Fixed ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž๋ฅผ Orthodox Canonical Form์œผ๋กœ ์ •์˜ํ•˜๊ณ , ๊ณ„์‚ฐ์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์ž๋ฅผ Overloading ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ ํ˜„์žฌ float, double๊ณผ ๊ฐ™์€ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ๊ณ ์ • ์†Œ์ˆ˜์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ณ ์ • ์†Œ์ˆ˜์ ์€ ํ•ด๋‹น ํƒ€์ž…์˜ ์ •์ˆ˜๋ถ€์™€ ์†Œ์ˆ˜๋ถ€๋ฅผ ์ •ํ™•ํžˆ ๊ตฌ๋ถ„ ์ง“๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๊ทธ ํ‘œํ˜„ ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ํ•œ์ •์ ์ด๋ผ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋ถ€๋™ ์†Œ์ˆ˜์ ์€ ๊ตฌํ˜„์€ ์กฐ๊ธˆ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •์ˆ˜๋ถ€์™€ ์†Œ์ˆ˜๋ถ€๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ง€์ˆ˜๋ถ€์™€ ๊ฐ€์ˆ˜๋ถ€๋กœ ๋‚˜๋ˆˆ ๊ณผํ•™์  ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ํ‘œํ˜„ ๋ฒ”์œ„๊ฐ€ ๋„“๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
๊ณ ์ • ์†Œ์ˆ˜์ ๊ณผ ๋ถ€๋™ ์†Œ์ˆ˜์ ์˜ ํ‘œํ˜„ ๋ฐฉ์‹์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ˜„์žฌ ์ปดํ“จํ„ฐ๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์ด์šฉํ•˜๋Š”๋ฐ ์œ„ ๋งํฌ ํ˜น์€ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์ฐพ์•„๋ณธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์˜ ํ‘œํ˜„๋ฒ•์„ ์–ด๋–ป๊ฒŒ ์กฐ์ž‘ํ•ด์•ผ ๊ณ ์ • ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ง€ ์• ๋งค๋ชจํ˜ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚œ float ํ˜น์€ double ๊ฐ’์— ๋Œ€ํ•ด์„  ๋น„ํŠธ ์—ฐ์‚ฐ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (๋ฌผ๋ก  ํƒ€์ž… ์บ์ŠคํŒ…์„ ์ด์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ ์ ‘๊ทผ์„ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ) ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฐ’ ์ž์ฒด๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํžˆ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•  ํ•„์š”๋Š” ์—†๋‹ค.
float ํ˜น์€ double ๊ฐ’์ด 2 ์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ 8 ๋น„ํŠธ๋งŒ ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚œ ๊ฐ’์— 8 ๋น„ํŠธ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์‰ฌํ”„ํŒ… ํ•ด๋‘” ๊ฐ’์„ _fixed_point๋กœ ์ €์žฅํ•ด๋‘๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ 8 ๋น„ํŠธ๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์‰ฌํ”„ํŒ… ํ•ด์„œ ๊ฐ’์„ ํ•ด์„ํ•˜๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์— ๋Œ€ํ•ด์„œ 2๊ฐ€์ง€ ์˜๋ฌธ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ฒซ ์งธ๋Š” 8 ๋น„ํŠธ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์‰ฌํ”„ํŒ…ํ•˜์—ฌ ๊ฐ’์„ ๋Š˜๋ ค์„œ ์ €์žฅํ•˜๋ฉด ๊ธฐ์กด ๊ฐ’์ด ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๊ณ , ๋‘˜ ์งธ๋Š” float๊ณผ double๊ฐ™์€ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ˜•์‹์€ ๋น„ํŠธ ์—ฐ์‚ฐ์ด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค. ์ฒซ ์งธ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ณ ์ • ์†Œ์ˆ˜์ ์ด ๋ถ€๋™ ์†Œ์ˆ˜์ ๋ณด๋‹ค ํ‘œํ˜„ ๋ฒ”์œ„๊ฐ€ ์ž‘๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด๋ณด๋ฉด ์ง€๊ทนํžˆ ์ •์ƒ์ ์ธ ๋™์ž‘์ด๋ฏ€๋กœ ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ธ ํ•„์š” ์—†๋‹ค. ํ‘œํ˜„์ด ์•ˆ ๋˜๋Š” ๋ฒ”์œ„๋Š” ๊ณ ์ • ์†Œ์ˆ˜์ ์œผ๋กœ๋Š” ํ‘œํ˜„์ด ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋‘˜ ์งธ์˜ ๊ฒฝ์šฐ์—๋Š” ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ†ตํ•ด ๊ฐ•์ œ๋กœ ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ๋˜์ง€ ์•Š๊ฒ ๋‚˜ ์‹ถ์ง€๋งŒ, ๋ถ€๋™ ์†Œ์ˆ˜์ ์€ ๊ณ ์ • ์†Œ์ˆ˜์ ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ •ํ™•ํžˆ ๊ทธ ๊ฐ’์ด ๋‚˜ํƒ€๋‚œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ง€์ˆ˜๋ถ€์™€ ๊ฐ€์ˆ˜๋ถ€๋กœ ๋‚˜๋‰˜๋ฏ€๋กœ ํƒ€์ž… ์บ์ŠคํŒ…์€ ๊ทธ๋ฆฌ ์ข‹์€ ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํƒ€์ž… ์บ์ŠคํŒ…์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๋‚˜ํƒ€๋‚œ ๊ฐ’์„ ์ง์ ‘ ํ•ด์„ํ•˜์—ฌ int ๊ฐ’์œผ๋กœ ๋Œ๋ฆฐ ๋’ค์— ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ•ด๋„ ๋˜๊ฒ ์ง€๋งŒ, ์ด๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๋‹จ์ˆœํžˆ float ํ˜น์€ double ๊ฐ’์— int ๊ฐ’ 1์„ 8 ๋น„ํŠธ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์‰ฌํ”„ํŒ… ํ•œ ๊ฐ’์„ ๊ณฑํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์•„๋‚ผ ๋•Œ ์ •ํ™•ํžˆ 8 ๋น„ํŠธ์— ๋Œ€ํ•ด์„œ๋งŒ ๋‚จ๊ฒจ๋‘์–ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ณฑํ•œ ๋’ค ๋‚จ์€ ์†Œ์ˆ˜์ ์— ๋Œ€ํ•ด์„œ๋Š” roundf๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
์‰ฌํ”„ํŒ…์ด ๊ณง ๊ณฑ์…ˆ ํ˜น์€ ๋‚˜๋ˆ—์…ˆ๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋ฉด, ์œ„ float ํ˜น์€ double ๊ฐ’์— ์‰ฌํ”„ํŒ…ํ•œ ๊ฐ’์„ ๊ณฑํ•˜๋Š” ๊ฒƒ์ด ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.
๊ณฑํ•œ ๊ฒฐ๊ณผ๋กœ _fixed_point๋ฅผ ์ €์žฅํ•ด๋‘” ๋’ค, toFloat์ด๋ผ๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ ์ฐพ์„ ๋•Œ๋Š” 1์„ 8 ๋น„ํŠธ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์‰ฌํ”„ํŒ…ํ•œ ๊ฐ’์„ ๋‚˜๋ˆ„๋ฉด roundf๋ฅผ ํ†ตํ•ด ์›๋ž˜ ๊ฐ’์—์„œ ์ •ํ™•ํžˆ 8๋น„ํŠธ๋งŒ ๋‚จ์€ ๊ฐ’์œผ๋กœ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
int๋ฅผ ์ €์žฅํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘์ ์ธ ๋น„ํŠธ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๊ณ  ์†Œ์ˆ˜์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•˜๋‹ค. ๊ฐ’ ์ž์ฒด๋ฅผ 8 ๋น„ํŠธ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์‰ฌํ”„ํŒ…ํ•˜๋ฉด ๋˜๊ณ , ์†Œ์ˆ˜์ ์ด ์—†์œผ๋ฏ€๋กœ roundf์˜ ์ฒ˜๋ฆฌ๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค. ๊ฐ’์„ ์ฐพ์„ ๋•Œ๋Š” _fixed_point๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 8 ๋น„ํŠธ๋งŒํผ ์‰ฌํ”„ํŒ…ํ•˜๋ฉด ๋์ด๋‹ค.

2. Binary Space Partitioning

Reference? Value?

operator+, operator-, operator*, operator/ ์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋“ค์€ Fixed ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š”๋ฐ, ์ด๋ฅผ ์ฐธ์กฐ์ž๊ฐ€ ๋ถ™์€ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด๋„ ๋˜์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, ์ด๋Š” ๊ทธ๋ฆฌ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Fixed ํด๋ž˜์Šค์ธ a, b๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. a + b๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œ๋กœ ์ƒ์„ฑํ•œ Fixed ํด๋ž˜์Šค์— ํ• ๋‹นํ•˜๊ณ , ์ด๋ฅผ ์ฐธ์กฐ์ž๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด Dangling Reference ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋ฐ˜ํ™˜๋œ ์ฐธ์กฐ์ž๋Š” ์ด๋ฏธ ํ•ด์ œ๋œ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ a + b๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” a์— b ๊ฐ’์„ ๋”ํ•˜์—ฌ a๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ b์— a๋ฅผ ๋”ํ•˜์—ฌ b๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ Dangling Reference๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด a + b + a ํ˜น์€ b + a + b ์—์„œ ์ค‘๋ณต๋œ ๊ฐ์ฒด๊ฐ€ ์ด๋ฏธ ๋ฐ”๋€ ๊ฐ’์œผ๋กœ ์ ์šฉ๋˜์–ด ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— operator+, operator-, operator*, operator/์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋“ค์€ ๊ฐ’์˜ ๋ณต์‚ฌ๊ฐ€ ์žˆ๋”๋ผ๋„, ์ฐธ์กฐ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.

Operator Overloading

๊ธฐ์กด์— ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด์„œ ์ž‘์„ฑํ•ด๋‘์—ˆ๋˜ ์—ฐ์‚ฐ์ž์˜ Overloading์€ ๊ทธ๋ฆฌ ์ข‹์€ ํ•จ์ˆ˜๋“ค์ด ์•„๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ด๋‹น๋˜๋Š” ์—ฐ์‚ฐ์ž๋“ค์€ ์ฐธ์กฐ์ž ํ˜•ํƒœ๋กœ ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” operator+, operator-, operator*, operator/, operator>, operator<, operator>=, operator<=, operator==, operator!= ์™€ ๊ฐ™์€ ์ดํ•ญ ์—ฐ์‚ฐ์ž๋“ค์— ํ•ด๋‹นํ•œ๋‹ค. ์ œ์‹œ๋œ ํ•จ์ˆ˜๋“ค์€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ์จ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์ง€๋งŒ, BSP์—์„œ๋Š” ํŠน๋ณ„ํ•œ ์–ธ๊ธ‰์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘ ์™ธ๋ถ€ ํ•จ์ˆ˜๋กœ ๋นผ๋†“์•˜๋‹ค. ์ด์œ ๋Š” ๊ตํ™˜ ๋ฒ•์น™ ๋•Œ๋ฌธ์ด๋‹ค.
๋ง์…ˆ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ๋‹ค. Fixed ํด๋ž˜์Šค๋Š” Fixed ํด๋ž˜์Šค + Fixed ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ์—๋Š” operator+์— ํ•ด๋‹นํ•˜์—ฌ ์ž˜ ๋™์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Fixed ํด๋ž˜์Šค + ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์˜ ๊ฒฝ์šฐ์—๋Š” operator+๊ฐ€ ์ž˜ ๋™์ž‘ํ•  ๊ฒƒ ๊ฐ™์ง€ ์•Š์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์„ ์„ ๋‹คํ•˜์—ฌ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์„ Fixed ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๋ ค ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Fixed ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”๋ฌต์ ์ธ ํ˜• ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋ฉด์„œ (๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์ด ์ƒ์„ฑ์ž์˜ ์ธ์ž๋กœ ์ด์šฉ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ) ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’ + Fixed ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜์น˜๋ฅผ ๋Œ€๋ณ€ํ•˜๋Š” ํด๋ž˜์Šค์ธ ๋งŒํผ ๊ตํ™˜ ๋ฒ•์น™๋„ ์ง€์›์„ ํ•ด์•ผํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
๋ฆฌํ„ฐ๋Ÿด ๊ฐ’ + Fixed ํด๋ž˜์Šค๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ Overloadingํ•œ ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํ›„๋ณด์ง€์— ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์„ Fixed ํด๋ž˜์Šค + ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ Fixed ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋กœ ์•”๋ฌต์ ์ธ ํ˜• ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค๋ ค๋ฉด, Fixed ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ณด๋‹ค๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด๋‹ค.
์—ฌ๊ธฐ์„œ ์ œ์‹œ๋œ ์ดํ•ญ ์—ฐ์‚ฐ์ž๋“ค์€ Fixed ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์šฉ์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๊ตณ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ ์™ธ๋ถ€ ํ•จ์ˆ˜๋กœ ๋บ„ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ํ†ต์ƒ์ ์œผ๋กœ๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ ๊ผญ ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ๋‹จํ•ญ ์—ฐ์‚ฐ์ž๋“ค๊ณผ ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ• ๋‹น ์—ฐ์‚ฐ์ž ๋“ฑ์„ ์ œ์™ธํ•˜๋ฉด ์™ธ๋ถ€ ํ•จ์ˆ˜๋กœ ๋นผ์„œ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

Const Value Casting

Point ํด๋ž˜์Šค์˜ ๋‘ ์ขŒํ‘œ xx, yy๋Š” Fixed ํด๋ž˜์Šค๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ํ•ด๋‹น ์ขŒํ‘œ๋Š” ์„œ๋ธŒ์ ํŠธ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ const๋กœ ์ •์˜๋˜๋Š”๋ฐ, Point ํด๋ž˜์Šค ๊ฐ„์˜ ๋Œ€์ž…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” const๋กœ ์ •์˜๋œ xx, yy๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ฌผ๋ก  ๋Œ€์ž…์„ ์œ„ํ•œ operator=๋ฅผ Overloading ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ๋งŒ์ด์ง€๋งŒ, Orthodox Canonical Form์„ ์œ„ํ•ด์„  ์ด๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค. const๋กœ ๋œ ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋Œ€์ž… ์ˆ˜ํ–‰์„ ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ this์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‘๋ฃจ ๋ณด์•˜๋Š”๋ฐ, C++์—์„œ๋Š” const๋กœ ๋œ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
const๋กœ ๋œ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋„๋Œ€์ฒด ์–ด๋”” ์žˆ๋ƒ๊ณ  ์˜๋ฌธ์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ์ด์— ๋Œ€ํ•ด์„œ ์„ค๊ณ„ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ๊ฐ€๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. const๋กœ ์ •์˜๋œ ๊ฐ’์€ ๊ฐ€๊ธ‰์  ๋ฐ”๊พธ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•˜๊ฒ ์ง€๋งŒ, ๊ตฌํ˜„์ฒด์˜ ๋งฅ๋ฝ ์ƒ const๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋ฉด์„œ๋„ ๋ฐ˜๋“œ์‹œ ์ด ๊ฐ’์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ํŠนํžˆ ํด๋ž˜์Šค์˜ ์ƒ์† ๊ด€๊ณ„์—์„œ ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ ์ข…์ข… ๊ฒช์„ ์ˆ˜ ์žˆ๋‹ค.
์ด์™€ ๊ด€๋ จํ•ด์„œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ Write์— ์ด์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ๊ธฐํ•˜๋Š” const์—๋„ ๋น„์Šทํ•œ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”๋ฐ, const๋กœ ์„ ์–ธ๋œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ๋‚ด์—์„œ mutable ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ Writeํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ง์ ‘ ๊ตฌํ˜„ํ•œ Cache์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ํด๋ž˜์Šค ๋ณด๋‹ค ๋จผ์ € ์ฐพ๋Š” ์˜ˆ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ฒฝ์šฐ์— ๋งŒ์ผ Cache์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ์ฐพ์œผ๋ ค๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ Cache์— ๊ธฐ๋กํ•˜์—ฌ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ Read๋งŒ ํ•˜๋Š” ์ž‘์—…์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Cache๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ๋˜๋ฏ€๋กœ Write๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ mutable ํ‚ค์›Œ๋“œ๊ฐ€ ์ด์šฉ๋˜๊ณ , ์š”์ ์€ ๋ถ„๋ช… const์—ฌ๋„ const ์†์„ฑ์„ ๋ฌด์‹œํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
const๋กœ ์ •์˜๋œ ๊ฐ’์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„  const_cast<T>๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. const_cast<T>๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋ฐ, ์ด๋Š” const๋กœ ์ •์˜๋œ ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„ ์ž์ฒด๋ฅผ const๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ œ๊ฑฐ๋œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ๋ฌผ๋ก  ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ const๊ฐ€ ์•„๋‹Œ ๊ณต๊ฐ„์„ const๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๋•Œ static_cast<T>์™€๋Š” ๋‹ฌ๋ฆฌ ํƒ€์ž… ๋ณ€ํ™˜์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด const int *๋กœ ๋œ ๊ณต๊ฐ„์—์„œ const๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด const_cast<int *>๋กœ๋งŒ ์ด์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
int main(void) { const int a = 1; int b; b = static_cast<int>(a); return(0); }
C++
์œ„์˜ ์˜ˆ์‹œ๊ฐ€ ์กฐ๊ธˆ ๊ทน๋‹จ์ ์ด๊ธด ํ•˜์ง€๋งŒ static_cast<T>๋ฅผ ์ด์šฉํ•˜๋‹ค๋ณด๋ฉด, ์ผ๋ฐ˜ ๋ณ€์ˆ˜์— const๋กœ ๋œ ๊ฐ’์„ ๋ณ€ํ™˜ํ•˜๋ฉด์„œ ์ด์šฉํ•œ ์‚ฌ๋ก€๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณธ์  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ๋„ const๊ฐ€ ์ œ๊ฑฐ๋œ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, a๋ผ๋Š” ๊ณต๊ฐ„ ์ž์ฒด๋Š” static_cast<T>์˜ ํ˜ธ์ถœ์—๋„ const ์†์„ฑ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•ด๋‹น ๊ตฌ๋ฌธ์€ b์— ํ• ๋‹น์„ ์œ„ํ•ด ์ผ์‹œ์ ์œผ๋กœ ํƒ€์ž…๋งŒ ๋งž์ถฐ์ค€ ๊ฒƒ์— ๋ถˆ๊ณผํ•˜๋‹ค. ๋”ฐ๋ผ์„œ a์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ํฌ์ธํ„ฐ๋กœ ์กฐ์ž‘ํ•ด๋ด๋„ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜๋‹ค.
#include <string> #include <iostream> int main(void) { const std::string a = "hi good"; (*(const_cast<std::string *>(&a)))[1] = 'o'; std::cout << a << std::endl; return (0); }
C++
๋ฐ˜๋ฉด์— ์œ„์™€ ๊ฐ™์€ const_cast<T>๋ฅผ ๋ณด๋ฉด const_cast<T> ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ a์˜ ๊ณต๊ฐ„์ด ์ผ์‹œ์ ์œผ๋กœ const ์†์„ฑ์ด ์ œ๊ฑฐ๋˜์–ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
#include <string> #include <iostream> int main(void) { const std::string a = "hi good"; (*(const_cast<std::string *>(&a)))[1] = 'o'; std::cout << a << std::endl; std::string *p = const_cast<std::string *>(&a); // ... Something to do (*p)[0] = 's'; std::cout << *p << std::endl; return (0); }
C++
const_cast<T>๋กœ const ์†์„ฑ์„ ์ œ๊ฑฐํ•œ ๊ฒฐ๊ณผ๋Š” ์ผ์‹œ์ ์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๋ฅผ ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด์„œ ์ˆ˜๋ช…์„ ์—ฐ์žฅํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
#include <iostream> int main(void) { // const char *s1 = "hi"; // (const_cast<char *>(s1))[1] = 'o'; // std::cout << s1 << std::endl; const char s2[] = "hi"; (const_cast<char *>(s2))[1] = 'o'; std::cout << s2 << std::endl; return(0); }
C++
const_cast<T>๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์†Œ ๊ฐ’๋งŒ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ๋‹ค. const char *๋ฅผ ์ด์šฉํ•  ์ผ์ด ๋“œ๋ฌผ๊ธด ํ•˜๊ฒ ์ง€๋งŒ, ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ฆฌํ„ฐ๋Ÿด ์˜์—ญ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ const_cast<T>๋กœ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ œ์‹œ๋œ ์ฝ”๋“œ์˜ ์ฃผ์„์„ ํ’€์–ด๋„ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด Bus Error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ const_cast<T>๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ์กฐ์ž‘ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์— ์œ„์น˜ํ•˜๋Š” ๊ฐ’์ธ์ง€ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์ด ํ•„์š”ํ•˜๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ์—๋Š” const char *๊ฐ€ ์•„๋‹Œ const char []์™€ ๊ฐ™์€ ๋ฐฐ์—ด๋กœ ์ด์šฉํ•˜๋ฉด, ์Šคํƒ์— ์œ„์น˜ํ•œ ๊ณต๊ฐ„์— ๋Œ€ํ•ด์„œ const ์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
Point& Point::operator=(const Point& p) { if (this != &p) { const_cast<Fixed&>(_x) = p.getX(); const_cast<Fixed&>(_y) = p.getY(); } return (*this); }
C++
const_cast<T>๋ฅผ ์ž˜ ์‘์šฉํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด Point ํด๋ž˜์Šค์˜ xx, yy์— ๋Œ€ํ•ด์„œ๋„ ์ ์ ˆํ•œ operator=๋ฅผ Overloadingํ•  ์ˆ˜ ์žˆ๋‹ค.

CW, CCW by Cross Product

๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€์— ์ ์ด ์œ„์น˜ํ•˜๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ CW, CCW๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. CW๋Š” Clockwise๋กœ ์‹œ๊ณ„ ๋ฐฉํ–ฅ, CCW๋Š” Counter-Clockwise๋กœ ๋ฐ˜ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์„ ์˜๋ฏธํ•œ๋‹ค. ์ œ์‹œ๋œ ๋ฐฉํ–ฅ์€ 2์ฐจ์› ์ƒ์˜ ๋‘ ๋ฒกํ„ฐ์— ๋Œ€ํ•ด์„œ Cross Product๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ๋ฒกํ„ฐ๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•˜๋Š”์ง€ ์™ผ์ชฝ์— ์œ„์น˜ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ CW์ธ์ง€ CCW์ธ์ง€ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๋ฒกํ„ฐ์˜ Cross Product๊ฐ€ ์–‘์ˆ˜๋ผ๋ฉด CCW, ์Œ์ˆ˜๋ผ๋ฉด CW, 0์ด๋ผ๋ฉด ํ‰ํ–‰์„ ์˜๋ฏธํ•œ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž. ์„ค๋ช…์ด ์ž˜ ๋˜์–ด ์žˆ๋‹ค.
๋‘ ๋ฒกํ„ฐ์˜ ์ƒ๋Œ€์  ๋ฐฉํ–ฅ์„ ๊ฒฐ์ • ์ง“๋Š” Cross Product๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€์— ์ ์ด ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค. Cross Product์˜ ๋ถ€ํ˜ธ๋ฅผ ์ด์šฉํ•œ ์ƒ๋Œ€์  ๋ฐฉํ–ฅ ํŒ๋ณ„์€ 180ยฐ180\degree๋ฅผ ๊ธฐ์ค€์œผ๋กœ CW์™€ CCW๋ฅผ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€์˜ ์ ์€ ์‚ผ๊ฐํ˜•์˜ ๋ชจ๋“  ์„ ๋ถ„๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ 180ยฐ180\degree ์•ˆ์— ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฐฉํ–ฅ์„ ์ด๋ฃฌ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์‚ผ๊ฐํ˜•์„ ์ด๋ฃจ๋Š” ์  AA, BB, CC์™€ ํŠน์ • ์  PP๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ABโ€พ\overline{AB}์™€ BPโ€พ\overline{BP}, BCโ€พ\overline{BC}์™€ CPโ€พ\overline{CP}, CAโ€พ\overline{CA}์™€ APโ€พ\overline{AP} ๊ฐ„์˜ ์ƒ๋Œ€์  ๋ฐฉํ–ฅ์„ ํŒŒ์•…ํ•ด๋ณด๋ฉด ๋ชจ๋‘ CW์ด๊ฑฐ๋‚˜ CCW์ด์–ด์•ผ ์  P๊ฐ€ ์‚ผ๊ฐํ˜•์˜ ๋‚ด๋ถ€์— ์žˆ๊ฒŒ ๋œ๋‹ค.
์ ์— ๋Œ€ํ•œ ์„ ๋ถ„์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋‘์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ABโ€พ\overline{AB}์™€ BPโ€พ\overline{BP}๋ฅผ ๋‘์—ˆ๋‹ค๋ฉด, BCโ€พ\overline{BC}์— ๋Œ€ํ•ด์„  BPโ€พ\overline{BP}๊ฐ€ ์•„๋‹Œ CPโ€พ\overline{CP}๋ฅผ ์ด์šฉํ•ด์•ผ ์ƒ๋Œ€์  ๋ฐฉํ–ฅ ํŒ๋ณ„์— ์ผ๊ด€์„ฑ์ด ์žˆ๋‹ค. ์œ„์—์„œ ์ œ์‹œ๋œ ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋กœ ABโ€พ\overline{AB}์™€ APโ€พ\overline{AP}, BCโ€พ\overline{BC}์™€ BPโ€พ\overline{BP}, CAโ€พ\overline{CA}์™€ CPโ€พ\overline{CP}๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
Vec operator-(const Point& p1, const Point& p2) { return (Vec(((p1.getX()) - (p2.getX())).toFloat(), (p1.getY() - p2.getY()).toFloat())); } Fixed operator*(const Vec& v1, const Vec& v2) { return (Fixed((v1.getX() * v2.getY()) - v1.getY() * v2.getX())); } bool operator~(const Fixed& f) { return (f > Fixed(0)); }
C++
์ด ๊ณผ์ •์—์„œ์˜ Point ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, Point ํด๋ž˜์Šค๊ฐ„์˜ Cross Product ๋ฐ ๋ถ€ํ˜ธ ํŒ๋ณ„์„ ํŠน์ • ์—ฐ์‚ฐ์ž๋กœ Overloadingํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ํŽธํ•˜๋‹ค. ๋‚ด ๊ฒฝ์šฐ์—๋Š” Point๋ฅผ Vec๊ณผ ๋™์ผํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ•ด๋‘์—ˆ๊ณ , Vec์„ ๊ตฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ operator-, Cross Product๋ฅผ ์œ„ํ•œ operator*, ๋ถ€ํ˜ธ ํŒ๋ณ„์„ ์œ„ํ•œ operator~๋ฅผ Overloading ํ•˜์˜€๋‹ค.

3. Code of Jseo