Description
– Inheritance & Polymorphism โ
๋ด๋น ์กฐ๊ต: ์ด์งํ (jihyung.lee@postech.ac.kr)
์ฃผ์์ฌํญ
๏ฌ ์
์ถ๋ ฅ์ ์ํ iostream ์ ์ ์ธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์ ํ์ฉํ์ง ์์ต๋๋ค. ๋จ, ๊ธฐ์กด ๊ณผ์ (Assignment2 ์์ ๊ตฌํํ๋ vector ๋ฑ)์์ ์ง์ ์ง์ ์ฝ๋๋ ์ฌ์ฉํ์
๋ ๋ฉ๋๋ค.
๏ฌ ๊ฐ ํด๋์ค๋ง๋ค header file ๊ณผ cpp file ์ ๋๋์ด ๊ตฌํํ์ฌ์ผ ํฉ๋๋ค. AShape ๊ด๋ จ ํด๋์ค๋ค์ ๊ฒฝ์ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ashape.h ์ ashape.cpp ์ ์ ์ธ๊ณผ ์ ์๋ฅผ ํฉ์ณ์ ์์ฑํ์ฌ๋ ๊ด์ฐฎ์ต๋๋ค.
๏ฌ ๋ฌธ์ ์ ๋ช
์๋์ด ์์ง ์๋๋ผ๋ ๊ฐ ํด๋์ค๋ง๋ค ์์ฑ์(Constructor), ์๋ฉธ์(Destructor)๋ ํ์์
๋๋ค. ๊ธฐ๋ณธ ์์ฑ์์ ๊ฒฝ์ฐ, ๋ณ๋ค๋ฅธ ์ธ๊ธ์ด ์๋ค๋ฉด ๋ฉค๋ฒ ๋ณ์์ int ๋ 0, char ๋ โaโ, string ์ โโ, pointer ๋ NULL ๋ก ์ด๊ธฐํํด ์ฃผ์ญ์์ค.
๏ฌ ํด๋์ค์ ๋ํ ํค๋ํ์ผ๊ณผ cpp ํ์ผ์ ํ์ผ๋ช
์ ํต์ผํ์ฌ ์ฃผ์ญ์์ค. (๋์๋ฌธ์ ์ ์) ๏ฌ ๋ชจ๋ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ protected, ํน์ private ์ผ๋ก ์ ์ธํ์ฌ์ผ ํฉ๋๋ค.
๏ฌ ์ฑ์ ์ ์ฌ์ฉ๋๋ ์ ํํ ํ
์คํธ ์ผ์ด์ค๋ ๊ณต๊ฐ๋์ง ์์ต๋๋ค. ์ด๋ ํ
์คํธ ์ผ์ด์ค์ ๋ง์ถฐ ํ์ํ ๋ถ๋ถ๋ง ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฒ์ด๋ ์ํดํด์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
๊ฐ์
๏ฌ ์ ์ถ ๊ธฐํ์ด ์ง๋๋ฉด ์ป์ ์ด์ ์ 20% ๊ฐ์
๏ฌ ์ถ๊ฐ๋ก ํ๋ฃจ(24 ์๊ฐ) ๋ฆ์ ๋๋ง๋ค 20%์ฉ ๊ฐ์
๏ฎ 1 ์ผ ์ด๋ด ์ง์ฐ: 20% ๊ฐ์ , 2 ์ผ ์ด๋ด ์ง์ฐ: 40% ๊ฐ์ , 5 ์ผ ์ด์ ์ง์ฐ: 0 ์
๏ฌ ์ปดํ์ผ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง์ง ์์ ๊ฒฝ์ฐ 0 ์
์ ์ถ๋ฐฉ์
[์๋์ฐ ์ด์ฉ์]
VS ํ๋ก์ ํธ๋ก ์ ์ถ ์ ์ ํด๋๋ฅผ ์ ๋ถ ์ง์ฐ๊ณ ์ ์ถํด์ฃผ์ญ์์ค. x64 ํด๋๋ ๋๊ฐ ์์ต๋๋ค.
(.vs ํด๋๋ ์จ๊ฒจ์ ธ์์)
์์ชฝ ํ์ผ๋ค์ ํฌํจํ์ฌ ํ๋ฒ์ ํด๋๋ช ์ผ๋ก ํ์ฌ ์์ถํด์ฃผ์ธ์ [๋งฅ ์ด์ฉ์]
์์ ๊ฐ์ด Makefile ํ์ผ์ ํฌํจ์์ผ ํ๋ฒ์ ํด๋๋ช ์ผ๋ก ํ์ฌ ์์ถํด์ฃผ์ธ์
์ฑ์ ๊ธฐ์ค
1. ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ
๏ฌ ํ๋ก๊ทธ๋จ์ด ์๊ตฌ ์ฌํญ์ ๋ชจ๋ ๋ง์กฑํ๋ฉด์ ์ฌ๋ฐ๋ก ์คํ๋๋๊ฐ?
2. ํ๋ก๊ทธ๋จ ์ค๊ฒ ๋ฐ ๊ตฌํ
๏ฌ ์๊ตฌ ์ฌํญ์ ๋ง์กฑํ๊ธฐ ์ํ ๋ณ์ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ๊ฐ ์ ๋์๋๊ฐ?
๏ฌ ์ค๊ณ๋ ๋ด์ฉ์ด ์๊ตฌ๋ ์ธ์ด๋ฅผ ์ด์ฉํ์ฌ ์ ์ ํ ๊ตฌํ๋์๋๊ฐ?
3. ํ๋ก๊ทธ๋จ ๊ฐ๋
์ฑ
๏ฌ ํ๋ก๊ทธ๋จ์ด ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑ๋์๋๊ฐ?
๏ฌ ๋ณ์ ๋ช
์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ดํดํ๊ธฐ ์ฌ์ด๊ฐ?
๏ฌ ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๋๋ก ์ฃผ์์ ์ ๋ถ์๋๊ฐ?
4. ๋ณด๊ณ ์ ๊ตฌ์ฑ ๋ฐ ๋ด์ฉ, ์์
๏ฌ ๋ณด๊ณ ์๋ ์ ์ ํ ๋ด์ฉ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ณ ๋ณด๊ธฐ ์ข๊ฒ ์ ์์ฑ๋์๋๊ฐ?
๏ฌ ๋ณด๊ณ ์์ ์์์ ์ ๋ฐ๋๋๊ฐ?
๋ค๋ฅธ ์ฌ๋์ ํ๋ก๊ทธ๋จ์ด๋ ์ธํฐ๋ท์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ณต์ฌ(copy)ํ๊ฑฐ๋ ๊ฐ๋จํ ์์ ํด์ ์ ์ถํ ๋ฉด ํ์ ์ ๋ฌด์กฐ๊ฑด โFโ๊ฐ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ถ์ ํ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํ๊ณผ์์ ์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ถ๊ฐ์ ๋ถ์ด์ต์ด ์์ ์ ์์ต๋๋ค.
์ํ๋ฒณ ๋ํ ๊ทธ๋ฆฌ๊ธฐ
๋ณธ ๊ณผ์ ์์๋ โ์ํ๋ฒณ ๋ํ(Alphabet Shape, ํต์นญ AShape)โ์ WhiteBoard ์ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ง์
๊ตฌํํด๋ณด๋ฉด์ Class Inheritance ์ Polymorphism ๊ฐ๋
์ ์ต ํ๋ณด๋๋ก ํ๋ค.
โข ํ๋ก๊ทธ๋จ ์ค๋ช
โ์ํ๋ฒณ ๋ํ ๊ทธ๋ฆฌ๊ธฐโ ํ๋ก๊ทธ๋จ์ 15×15 ์ฌ์ด์ฆ์ WhiteBoard ์ ์ํ๋ฒณ์ ๊ฐ์ผ๋ก ๊ฐ์ง๋ ๋ํ ๋ค ์ข
๋ฅ(์ , ์ํ์ , ์์ง์ , ์ฌ๊ฐํ)์ ๊ทธ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ด๋ค. WhiteBoard ๋ ์ฒ์์๋ ๋น์ด์์ผ๋ฉฐ, ๋น์ด์๋ ์นธ์ *์ ์ถ๋ ฅํ๋ค. ์ด ํ๋ก๊ทธ๋จ์ ๋ค์ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ง์ํด์ผํ๋ค.
1. WhiteBoard ์ ์๋ก์ด ๋ํ ์ถ๊ฐ
2. WhiteBoard ์ ํ์ฌ ๊ทธ๋ ค์ ธ ์๋ ๋ํ ์ญ์
3. ํ๋ก๊ทธ๋จ ์ข
๋ฃ ์๋ ์ค๋ช
์ ์ ์ฝ๊ณ , ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ํ๋ก๊ทธ๋จ์ ๊ตฌํํด๋ณด๋๋ก ํ์.
1. ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ
1.1 ๋ฉ๋ด
WhiteBoard ์ขํ์ ๋ํ ๊ทธ๋ฆผ
ํ๋ก๊ทธ๋จ ์์ ํ๋ฉด
ํ๋ก๊ทธ๋จ ์์ ์ ๋น์ด์๋ WhiteBoard ์ ํจ๊ป ๋ฉ๋ด๊ฐ ์ถ๋ ฅ๋๋ค. โ1โ์ ์
๋ ฅํ ์ ๋ํ ์ถ๊ฐ, โ2โ๋ฅผ ์
๋ ฅํ๋ฉด ๋ํ ์ญ์ , โ3โ์ ์
๋ ฅํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋๋ค.
WhiteBoard ๋ 15×15 ์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ์ง๋๋ค. ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด x ๊ฐ์ ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์๋ก ์ปค์ง๊ณ , y ๊ฐ์ ์์ชฝ์์ ์๋๋ก ๋ด๋ ค์ฌ์๋ก ์ปค์ง๋ค. ๊ฐ์ฅ ์ผ์ชฝ ์ ์ขํ๋ (0,0), ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์ขํ๋
(14,14)์ด๋ค.
1.2 WhiteBoard ์ ์๋ก์ด ๋ํ ์ถ๊ฐ
์ ์ ๋ก๋ถํฐ ์ํ๋ฒณ, x ์ขํ ๋ฐ y ์ขํ๋ค์
์
๋ ฅ๋ฐ๋ ํ๋ฉด. โqโ๋ฅผ ์ํ๋ฒณ์ผ๋ก ๊ฐ์ง๊ณ ์ขํ๊ฐ (1~3,2),
๊ธธ์ด๊ฐ 3 ์ธ ์์ง์ ์ด ์ถ๊ฐ๋ ํ๋ฉด
๋ฉ๋ด 1 ๋ฒ, ๋ํ ์ถ๊ฐ๋ก ๋ค์ด๊ฐ๋ฉด ํ๋ก๊ทธ๋จ์ ์ ์ ๋ก๋ถํฐ (1)์ํ๋ฒณ ๋ฐ (2) x ์์์ขํ์ (3) x ๋์ขํ (4) y ์์์ขํ์ (5) y ๋์ขํ ์ด ๋ค์ฏ๋ฒ์ ์
๋ ฅ ๋ฐ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ ์ ๊ฐ ์
๋ ฅํ ์ขํ ๊ฐ์ด ์ด๋ ๋ํ์ ํด๋นํ๋์ง ํ๋จํ์ฌ, ์ถ๊ฐ๋๋ ๋ํ์ ์ข
๋ฅ์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๊ณ WhiteBoard ์ ๊ทธ๋ฆฐ๋ค. ์ ๋ํ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ๋์ ํ ๋น์ด ์ผ์ด๋์ผ ํ๋ค.
๋ํ์ ์ข
๋ฅ๋ 1. ์ (APoint) 2. ์์ง์ (AVerticalLine) 3. ์ํ์ (AHorizontalLine) 4. ์ฌ๊ฐํ(Rectangle) ์ด ๋ค ๊ฐ์ง์ด๋ฉฐ ๊ทธ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ (APoint): ํฌ๊ธฐ๋ 1 ์ด๋ฉฐ, x ์์์ขํ๊ณผ ๋์ขํ ๋ฐ y ์์์ขํ์ ๋์ขํ๊ฐ ๊ฐ๊ฐ ๊ฐ๋ค.
2. ์์ง์ (AVerticalLine): ํฌ๊ธฐ๋ ์ ์ ๊ธธ์ด์ ๊ฐ์ผ๋ฉฐ, x ์์์ขํ์ ๋์ขํ๊ฐ ๊ฐ์ง๋ง y ์์์ขํ์ ๋์ขํ๊ฐ ๋ค๋ฅด๋ค.
3. ์ํ์ (AHorizontalLine): ์์ง์ ์ ๋ฐ๋๋ก, y ์์์ขํ์ ๋์ขํ๊ฐ ๊ฐ์ง๋ง x ์์์ขํ์ ๋์ขํ๊ฐ ๋ค๋ฅด๋ค.
4. ์ฌ๊ฐํ(ARectangle): ํฌ๊ธฐ๋ ์ฌ๊ฐํ์ ๋์ด์ ๊ฐ์ผ๋ฉฐ, x ๋ฐ y ์์์ขํ์ ๋์ขํ๊ฐ ์๋ก ๋ค๋ฅด๋ค.
์ด์ด์ ์ํ๋ฒณ โzโ๋ฅผ ๊ฐ์ง๋ ํฌ๊ธฐ 20 ์ง๋ฆฌ ์ฌ๊ฐํ์ ์ถ๊ฐํด๋ณด๋๋ก ํ์.
์ถ๊ฐํ ์ฌ๊ฐํ์ด ์ํ์ ๊ณผ ๊ฐ์ด
WhiteBoard ์ ์ถ๋ ฅ๋๋ค.
์ํ๋ฒณ โuโ๋ฅผ ๊ฐ์ง๋ ์ ์ ๋ ์ถ๊ฐํ๋ค.
์๋ก ์ถ๊ฐ๋ ์ ์ด (7,7)์ ๊ทธ๋ ค์ง ๋ชจ์ต.
(๋ํ์ ์์น๊ฐ ๊ฒน์น๋ ๊ฒฝ์ฐ ์ ๋ํ์ด ๋ฎ์ด์ด๋ค)
1.3 WhiteBoard ์ ํ์ฌ ๊ทธ๋ ค์ ธ ์๋ ๋ํ ์ญ์
๋ฉ๋ด์์ โ2โ๋ฅผ ์
๋ ฅํ ๊ฒฝ์ฐ ํ์ฌ WhiteBoard ์ ๊ทธ๋ ค์ ธ ์๋ ๋ํ์ ์ญ์ ํ ์ ์๋ค. ๋ํ ์ญ์ ๋ฉ๋ด๋ก ๋ค์ด๊ฐ ์ ํ์ฌ WhiteBoard ์ ์ถ๊ฐ๋์ด์๋ ๋ํ์ ๊ฐ์๊ฐ ์ถ๋ ฅ๋์ด์ผ ํ๋ฉฐ, ๋ํ ๊ฐ๊ฐ์ ์ ๋ณด(์ขํ, ์ํ๋ฒณ, ํฌ๊ธฐ)๊ฐ ๋ณด์ฌ์ผ ํ๋ค.
๊ทธ๋ฆผ์ ์์ ์์๋ 1.2 ์์ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์์ง์ , ์ฌ๊ฐํ, ์ ์ด ์ธ ๊ฐ์ง์ ๋ํ์ด ์ถ๊ฐ๋์ด ์์ผ๋ฏ๋ก ๋ฆฌ์คํธ์๋ ์ธ ์ข
๋ฅ์ ๋ํ์ด ์ถ๋ ฅ๋๋ค. ๋ํ ๋ฆฌ์คํธ ์ธ๋ฑ์ค๋ 0 ๋ถํฐ ์์ํ๋ค.
์ด ๋, ์ ์ ๊ฐ ์ญ์ ๋ฅผ ์ํ๋ ๋ํ์ index ๋ฅผ ์
๋ ฅํ ์ ํด๋น ๋ํ์ด WhiteBoard ์์ ์ญ์ ๋๋ค. ๋ํ ์ญ์ ์ ๋์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ด์ผํ๋ค.
๋ฆฌ์คํธ ์ธ๋ฑ์ค โ2โ๋ฅผ ์ ๋ ฅํ์ฌ ๋งจ ๋ง์ง๋ง์ ์ถ๊ฐํ ์ขํ (7,7)์ ์ (APoint)์ ์ญ์ ํ ์ผ์ด์ค
์ด์ด์ ์ขํ (4-7, 5-9)์ ์ํ๋ฒณ z ๋ฅผ ๊ฐ์ง๋ ์ฌ๊ฐํ์ ์ง์๋ณด๊ฒ ๋ค.
๋ฆฌ์คํธ์์ ์ฌ๊ฐํ์ index โ1โ์ ์
๋ ฅํ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ์ด ์ง์์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
1.4 ๋ํ์ด ๊ฒน์น๋ ๊ฒฝ์ฐ ๋ํ์ด ๊ฒน์น๋ ๊ฒฝ์ฐ๋ฅผ ๋ง์ ํ์๋ ์๋ค. ๋ํ์ด ๊ฒน์น๋ ๊ฒฝ์ฐ WhiteBoard ์ ์ถ๊ฐ๋ ์์๋๋ก ๊ทธ๋ฆฐ๋ค.
(์ ๋ํ์ด ๊ธฐ์กด์ ๋ํ์ ๋ฎ์ด์)
๋จ, ์๋ฅผ ๋ฎ์ ๋ํ์ ์ญ์ ํ๋ค๋ฉด ๊ธฐ์กด์ ๋ํ์ด ๋ค์ ๋ณด์ฌ์ผํ๋ค. (1.3 ๋ํ ์ญ์ ์ ๋๋ฒ์งธ ์์ ์ฌ์ง ์ฐธ์กฐ)
1.5 ํ๋ก๊ทธ๋จ ์ข ๋ฃ
๋ฉ๋ด์์ โ3โ์ ์ ๋ ฅ ์ โExit Programโ ๋ฉ์์ง ์ถ๋ ฅ๊ณผ ํจ๊ป ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค.
1.6 ์์ธ ์ฒ๋ฆฌ
๋ค์๊ณผ ๊ฐ์ ์ผ์ด์ค์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผํ๋ค. 1. ๋ฉ๋ด
์๋ชป๋ ์ซ์ ์
๋ ฅ์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ:
โInvalid input. Type againโ ์๋ฌ ๋ฉ์์ง์ ํจ๊ป WhiteBoard ๋ฐ ๋ฉ๋ด๊ฐ ์ฌ์ถ๋ ฅ๋๋ค.
2. ๋ํ ์ถ๊ฐ
[A] x_start ๊ฐ x_end ๋ณด๋ค ํฌ๊ฑฐ๋, y_start ๊ฐ y_end ๋ณด๋ค ํฐ ๊ฒฝ์ฐ:
์์์ขํ๊ฐ ๋์ขํ๋ฅผ ๋์ด์ฐ๋ค๋ ์๋ฌ ๋ฉ์์ง์ ํจ๊ป WhiteBoard ๋ฐ ๋ฉ๋ด๊ฐ ์ฌ์ถ๋ ฅ๋๋ค.
[B] ์ขํ์ค์ ํ๋๋ผ๋ ์์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ:
์ขํ๋ ์์๊ฐ ๋์ง ๋ชปํ๋ค๋ ์๋ฌ
๋ฉ์์ง์ ํจ๊ป WhiteBoard ๋ฐ ๋ฉ๋ด๊ฐ ์ฌ์ถ๋ ฅ๋๋ค.
[C] ์ขํ์ค์ ํ๋๋ผ๋ ํ์ดํธ๋ณด๋์ ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ:
์
๋ ฅ ์ขํ๊ฐ WhiteBoard ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋ฌ๋ค๋ ์๋ฌ ๋ฉ์์ง์ ํจ๊ป
WhiteBoard ๋ฐ ๋ฉ๋ด๊ฐ ์ฌ์ถ๋ ฅ๋๋ค.
์ฌ๋ฌ ์๋ฌ๊ฐ ์ค๋ณต์ผ๋ก ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ์ฐ์ ์ถ๋ ฅ ์์๋ A>B>C ์ด๋ค.
์๋ฅผ ๋ค์ด, y_start ๊ฐ y_end ๋ณด๋ค ํฌ๋ฉด์
์์๊ฐ ๋ค์ด์ฌ ๊ฒฝ์ฐ ์๋ฌ์ผ์ด์ค A ์ ๋ํ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋์ด์ผ ํ๋ค.
3. ๋ํ ์ญ์
[A] ๋ํ ๋ฆฌ์คํธ๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ: ๋ฆฌ์คํธ๊ฐ ๋น์ด์๋ค๋ ์๋ฌ ๋ฉ์์ง์ ํจ๊ป
WhiteBoard ๋ฐ ๋ฉ๋ด๊ฐ ์ฌ์ถ๋ ฅ๋๋ค.
[B] ๋ํ ๋ฆฌ์คํธ ์ธ๋ฑ์ค์์ ๋ฒ์ด๋๋ ์
๋ ฅ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ:
์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋ฌ๋ค๋ ์๋ฌ ๋ฉ์์ง์ ํจ๊ป WhiteBoard ๋ฐ ๋ฉ๋ด๊ฐ ์ฌ์ถ๋ ฅ๋๋ค. ์์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ & ๋ฆฌ์คํธ ์ฌ์ด์ฆ๋ฅผ ์ด๊ณผํ๋ ์
๋ ฅ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ ๋๋ค ํด๋น๋๋ค.
์๋ฌ ๋ฉ์์ง๋ ๊ฐ ์๋ฌ ์ผ์ด์ค๊ฐ ๊ตฌ๋ถ๋๊ธฐ๋ง ํ๋ค๋ฉด ์์ ์๋ ๋ค๋ฅธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํด๋ ์๊ด์๋ค. ๋จ, ์ด ๊ฒฝ์ฐ ๋ณด๊ณ ์์ ํด๋น ์๋ฌ ๋ฉ์์ง๊ฐ ์ด๋ค ์ผ์ด์ค์ ํด๋น๋๋ ๊ฒ์ธ์ง ์ค๋ช
ํด์ผ ํ๋ค.
์์์ ์ธ๊ธ๋์ง ์์ ๋ถ๋ถ์ ๋ํด์๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์๊ฐํ์ง ์์๋ ๋๋ค.
(ex) ๋ฉ๋ด ์
๋ ฅ ์ ๋ฌธ์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ, ๋ํ ์ถ๊ฐ ์ ์ํ๋ฒณ์ ์ด์ํ ๊ฐ์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ ๋ฑ… ์ ๊ณ ๋ คํ ํ์ ์๋ค.
2. ๊ตฌํ
2.1 AShape (Alphabet Shape) ๊ด๋ จ ํด๋์ค
์๋ ๊ทธ๋ฆผ์ ์์ ๋ AShape ๊ด๋ จ ๋ฉค๋ฒ ํจ์ ๋ฐ ๋ฉค๋ฒ ๋ณ์๋ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ฉฐ, ์ด๋ฆ์ ๋ณ๊ฒฝํด์๋ ์๋๋ค. ํ์์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ๋ฉค๋ฒ ํจ์๋ฅผ ์ถ๊ฐํด๋ ๋๋ค.
AShape ํด๋์ค: ์์ ๊ฐ์ ํจ์๋ฅผ ๊ฐ์ง๋ abstract class ์ด๋ฉฐ, ๋ค๋ฅธ shape ๋ค์ parent class ์ด๋ค. draw, print, size ๋ฅผ pure virtual ํจ์๋ก ์ ์ํ๋ค.
APoint, AVerticalLine, AHorizontalLine, ARectangle ํด๋์ค: AShape ๋ฅผ ์์๋ฐ๋ ํด๋์ค
๊ฐ AShape ๊ด๋ จ ํด๋์ค๋ค์ ์๋์ ๋ฉค๋ฒ ํจ์๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
โข ์์ฑ์ ๋ฐ ์๋ฉธ์
โข void draw(WhiteBoard* board) const: ํ์ดํธ๋ณด๋์ ํด๋น ๋ํ์ ์ขํ ๋ฐ ์ํ๋ฒณ์ ์ ๋ณด๋ฅผ ๋ณด๋ด ๊ทธ๋ฆฌ๊ฒ ํ๋ค.
โข void print() const: ํด๋น ๋ํ์ ์ค๋ช
ํ๋ ๋ด์ฉ์ ์ถ๋ ฅํ๋ ํจ์. ๋ํ์ ์ขํ๊ฐ ๋ฐ ๊ฐ๊ณ ์๋ ์ํ๋ฒณ, ํฌ๊ธฐ๋ฅผ ์ ๋ถ ์ถ๋ ฅํ๋ค. ๋ํ ์ญ์ – ๋ฆฌ์คํธ ์ถ๋ ฅ ์ ๋ํ์ ์ค๋ช
ํ๋ ๋ฐ์์ ์ฐ์ธ๋ค.
– ex) ์ํ์ ์ ๊ฒฝ์ฐ AHorizontalLine with [alphabet: q] and [y: 13] [x_start: 10 ] [x_end: 12]
[size: 3] ์ด์ ๊ฐ์ด ์ถ๋ ฅํ๋ฉด ๋๋ค. ๋ฐ๋์ ์์ ๊ฐ์ ์์์ผ๋ก ์ถ๋ ฅํ ํ์๋ ์๊ณ , ํ์ํ ์ ๋ณด๋ง ๋ด๊ฒจ์์ผ๋ฉด ๋๋ค.
โข int size() const: ๋ํ์ ํฌ๊ธฐ๋ฅผ ๋ฆฌํดํ๋ ํจ์. ์ ์ ๊ฒฝ์ฐ 1, ์ ์ ๊ฒฝ์ฐ์ ์ ์ ๊ธธ์ด, ์ฌ๊ฐํ์ ๊ฒฝ์ฐ์๋ ์ฌ๊ฐํ์ ๋์ด์ด๋ค.
2.2 AShapeList
๋ํ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค. ์์ ๊ทธ๋ฆผ์ linked list ๋ก ๊ตฌํํ ์ฌ๋ก์ด๋ฉฐ, ๋ฐ๋์ linked list ๋ฅผ ์ด์ฉํ ํ์๋ ์๋ค. ๋ณธ์ธ์ด ์๊ฐํ๊ธฐ์ ๋ ๋์ ์๋ฃ ๊ตฌ์กฐ ๋ฐ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ด์ฉํด๋ ์๊ด์๋ค. ์ด ๊ฒฝ์ฐ ํ์ํ ๋ฉค๋ฒ ํจ์์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์์ ๋กญ๊ฒ ์ค๊ณํด๋ณด๋๋ก ํ๋ค.
assignment2 ์์ ๊ตฌํํ vector ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ๋จ, ๋ชจ๋ ์ฝ๋๋ ์ง์ ๊ตฌํํด์ผ ํ๋ฉฐ STL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉํ๋ฉด ์๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ ์ด์ฉํ์๋์ง ๋ณด๊ณ ์์ ์ ๋๋ก ํ๋ค.
์ ๋ํ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ๋์ ํ ๋น์ด ์ผ์ด๋๋ฏ๋ก, AShapeList ์ ์๋ฉธ์์์๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ๋ ๊ฒ์ ์์ง ๋ง์.
– void addNewAShape(AShape* new_shape): ๋ฆฌ์คํธ์ ์ ๋ํ์ ์ถ๊ฐํ๋ค.
– AShapeNode* popNodeByIdx(int idx): ์ธ๋ฑ์ค๋ฅผ ๋ฐ์ ๋ฆฌ์คํธ์์ ํด๋น AShapeNode ๋ฅผ ๋นผ๋ด๊ณ , ๋นผ๋ธ ๋
ธ๋์ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค. (ex) idx 0 ์ด ๋ค์ด์ฌ๋ ์ฒซ๋ฒ์งธ Node ๋ฅผ ๋ฆฌํดํ๋ค.
– const AShapeNode* getNodeByIdx(int idx) const: ์ธ๋ฑ์ค๋ฅผ ๋ฐ์ ๋ฆฌ์คํธ์์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ์๋ฒ์ AShapeNode ์ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค. popNodeByIdx ์ ๋ฌ๋ฆฌ, ๋
ธ๋๋ฅผ ๋ฆฌ์คํธ์์ ๋นผ์ง ์๋๋ค.
– void displayAShapeList() const: ํ์ฌ ๊ด๋ฆฌ์ค์ธ ๋ชจ๋ ๋ํ์ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ํ ์ญ์ ์ ๋ํ์ ์ ๋ณด๋ฅผ ํ๊บผ๋ฒ์ ์ถ๋ ฅํ ๋ ์ฐ์ธ๋ค.
– void drawAll(WhiteBoard* board) const: ํ์ฌ ๊ด๋ฆฌ์ค์ธ ๋ชจ๋ ๋ํ์ WhiteBoard ์ ๊ทธ๋ฆฐ๋ค.
– int getSize() const: ํ์ฌ ๋ฆฌ์คํธ๊ฐ ๊ฐ๊ณ ์๋ ๋ํ์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
์ ๋ฉค๋ฒ ํจ์๋ ์์ ์ด๋ฉฐ, AShape ์ ๋ชฉ๋ก์ ๊ด๋ฆฌํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ์ค๊ณํ๋๋ก ํ๋ค.
2.3 WhiteBoard
WhiteBoard class ๋ ์ง์ ๋ ํฌ๊ธฐ์ 2 ์ฐจ์ char ๋ฐฐ์ด์ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง๋ฉฐ, ๋ค๋ฅธ ํด๋์ค์์ ํธ์ถ๋๋ค.
– void fillPoint(int x, int y, char alphabet): ์ง์ ๋ x,y ์ขํ์ ๋ค์ด์จ alphabet ์ผ๋ก ์นธ์ ์ฑ์ด๋ค.
– void reset(): ๋ชจ๋ ์นธ์ *๋ก ์ด๊ธฐํํ๋ค.
– void display() const: whiteboard ๋ฅผ ์ถ๋ ฅํ๋ค.
2.4 Menu
Menu class ๋ ๋ฉ๋ด ํด๋์ค์ด๋ฉฐ, ๋ํ ์ถ๊ฐ, ๋ํ ์ญ์ , ํ๋ก๊ทธ๋จ ์ข
๋ฃ ๋ฑ ๋ฑ ํ๋ก๊ทธ๋จ ์ ๋ฐ์ ๋ํด ์ฒ๋ฆฌํ๋ค.
– void display() const: ๋ฉ๋ด๋ฅผ ์ถ๋ ฅํ๋ค.
– bool getRunning() const: ํ์ฌ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ์ง์ ์ฌ๋ถ๋ฅผ true, false ๋ก ๋ฆฌํดํ๋ค.
– void getUserInput() const: ์ ์ ์ ์
๋ ฅ์ ๋ฐ์ ๋ฉ๋ด๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๊ณ , ์ดํ addAShape, deleteAShape ๋ฑ์ ํธ์ถํ๋ค.
– void addAShape() const: ์ ์ ์ ์
๋ ฅ์ ๋ฐ์ ์ ๋ํ์ ์ถ๊ฐํ๋ค.
– void deleteAShape() const: ์ ์ ์ ์
๋ ฅ์ ๋ฐ์ ๋ํ ์ญ์ ๋ฅผ ์งํํ๋ค.
2.5 main
๋ฉ์ธ ํ์ผ์ ์์ ์ด๋ฉฐ, ๋ฐ๋์ ์๋์ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ผํ๋ ๊ฒ์ ์๋๋ค. ์์ ์ด ๊ตฌํํ๋๋ก main ํจ์๋ฅผ ์ค๊ณํด๋ณด์.
#include “menu.h”
int main()
{
WhiteBoard board;
AShapeList shape_list;
Menu menu(&board, &shape_list);
while (menu.getRunning())
{
//WhiteBoard Display board.reset(); shape_list.drawAll(&board);
board.display();
//Menu Display & Get Input menu.display();
menu.getUserInput();
}
return 0;
}
์ฑ์ ๊ธฐ์ค
1. ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ โ 50%
– ๋ฉ๋ด ํ๋ฉด 5%
– ๋ํ ์ถ๊ฐ 20%
– ๋ํ ์ญ์ 20%
– ์์ธ ์ฒ๋ฆฌ 5%
2. ํ๋ก๊ทธ๋จ ์ค๊ณ ๋ฐ ๊ตฌํ โ 30%
– AShape ๋ฐ AShape ๊ด๋ จ class 10%
– AShapeList 10%
– WhiteBoard, Menu, main 10%
3. ํ๋ก๊ทธ๋จ ๊ฐ๋
์ฑ โ 10%
4. ๋ณด๊ณ ์ ๊ตฌ์ฑ ๋ฐ ๋ด์ฉ, ์์ โ 10%




Reviews
There are no reviews yet.