ํด๋์ค ๊ฐ์ฒด์ ์ฐธ์กฐ
์ผ๋ฐ์ ์ผ๋ก c++๋, ํด๋์ค ๊ฐ์ฒด๋ฅผ ํจ์์ ์ ๋ฌํ ๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํจ
์๋ฅผ ๋ค๋ฉด, string,ostream,istream,ofstream,ifstream ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ทจํ๋ ํจ์๋ค์ ์ฐธ์กฐ ๋งค๊ฐ๋ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
๋ ํ๋์ ๊ฐ์ฒด ๋ ์จ : ๊ฐ์ฒด,์์,์ฐธ์กฐ
์์ : ํ ํด๋์ค์์ ๋ค๋ฅธ ํด๋์ค๋ก ๊ธฐ๋ฅ ์ ๋ฌ์ ๊ฐ๋ฅํ๊ฒ ํ๋ c++ ์ธ์ด์ ๊ธฐ๋ฅ ostream์ ๊ธฐ์ด ํด๋์ค(base class)๋ผ ํ๊ณ ofstream์ ํ์ ํด๋์ค(derived class)๋ผ ํ ๋ ํ์ ํด๋์ค๋ ๊ธฐ์ด ํด๋์ค์ ๋ฉ์๋๋ค์ ์์ํจ. ์ฆ, ofstream ๊ฐ์ฒด๊ฐ precision(),setf()๋ฑ์ ํฌ๋งทํ ๋ฉ์๋์ ๊ฐ์ ๊ธฐ์ด ํด๋์ค์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅํจ.
์์์ ๋ ํ ๊ฐ์ง ์ธก๋ฉด์, ๋ฐ์ดํฐํ ๋ณํ ์์ด ๊ธฐ์ด ํด๋์ค ์ฐธ์กฐ๊ฐ ํ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ๊ฐ๋ฅ
์๋ฅผ ๋ค๋ฉด ostream &ํ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ ํจ์๋, cout๊ณผ ๊ฐ์ ostream ๊ฐ์ฒด์ ์ฌ์ฉ์๊ฐ ์ ์ธํ๋ ofstream ๊ฐ์ฒด๋ฅผ ๋๋ฑํ๊ฒ ๋ฐ์๋ค์ผ ์ ์๋ค.
setf() ๋ฉ์๋ : ๋ค์ํ ํฌ๋งทํ ์ํ๋ฅผ ์ค์ ํ ์ ์๊ฒ ํจ
ex) setf(ios_base::fixed)๋ ๊ณ ์ ์์์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋์ ๊ฐ์ฒด๋ฅผ ๋๋๋ค. seft(ios_base::showpoint)๋ ๋ค๋ฐ๋ฅด๋ ์ซ์๋ค์ด 0์ธ ๊ฒฝ์ฐ์๋ ๋ค์ ๋ถ์ ์์์ ์ ํ์ํ๋ ๋ชจ๋์ ๊ฐ์ฒด๋ฅผ ๋์
precision() ๋ฉ์๋ : (๊ฐ์ฒด๊ฐ ๊ณ ์ ์์์ ํ๊ธฐ ๋ชจ๋์ ๋์์ ๋)
์์์ ์ ์ค๋ฅธ์ชฝ์ ํ์ํ ์ซ์๋ค์ ๊ฐ์๋ฅผ ์ง์ ํจ. ์ด ๋ชจ๋ ์ค์ ๋ค์ ๋ค๋ฅธ ๋ฉ์๋ ํธ์ถ์ ์ํด ์ฌ์ค์ ๋ ๋๊น์ง ํจ๋ ฅ์ ์ ์งํจ.
width() ํธ์ถ์ ๋ค์ ์ถ๋ ฅ ๋์์ ์ฌ์ฉํ ํ๋ ํญ์ ์ค์ ํจ
์ด ์ค์ ์ ํ๋์ ๊ฐ์ ๋์คํ๋ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ ๋ํดํธ๋ก ๋ค์ ๋์๊ฐ
ios_base::fmtflags initial;
initial=os.setf(ios_base::fixed); //์ด๊ธฐ ํฌ๋งทํ ์ํ ์ ์ฅ
...
os.setf(initial); // ์ด๊ธฐ ํฌ๋งคํ ์ํ ๋ณต์
setf() ๋ฉ์๋๋ ํธ์ถ์ ํ๊ธฐ ์ ์ ์ ํจํ ๋ชจ๋ ํฌ๋งทํ ์ค์ ๋ค์ ๋ณต์ฌ๋ณธ์ ๋ฆฌํดํ๋ค. ios_base::fmtflags๋ ์ด ์ ๋ณด๋ฅผ ์ ์ฅํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐํ์ ์ฅ์์ ์ด๋ฆ์ด๋ค.
์ฐธ์กฐ ๋งค๊ฐ๋ณ์๋ ์ธ์ ์ฌ์ฉํ๋๊ฐ?
1. ํธ์ถ ํจ์์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ํ์ฉํ๊ธฐ ์ํด
2. ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์ฒด ๋์ ์ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ์ฌ ํ๋ก๊ทธ๋จ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด
ํจ์๊ฐ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ฌ์ฉ๋ง ํ๋ ๊ฒฝ์ฐ
1. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๊ธฐ๋ณธ ๋ฐ์ดํฐํ์ด๋ ์์ ๊ตฌ์กฐ์ฒด๋ผ๋ฉด ๊ฐ์ผ๋ก ์ ๋ฌ
2. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ด๋ผ๋ฉด ํฌ์ธํฐ๊ฐ ์ ์ผํ ์ ํ์ด๋ฏ๋ก ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค. ํฌ์ธํฐ๋ฅผ const๋ฅผ ์ง์ํ๋ ํฌ์ธํฐ๋ก ๋ง๋ ๋ค
3. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๋ฉ์น ํฐ ๊ตฌ์กฐ์ฒด๋ผ๋ฉด const ํฌ์ธํฐ๋ const ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์๋๋ฅผ ๋์ธ๋ค. ์ด๊ฒ์ ๊ตฌ์กฐ์ฒด๋ ํด๋์ค ์ค๊ณ๋ฅผ ๋ณต์ฌํ๋๋ฐ ๋๋ ์๊ฐ๊ณผ ๊ณต๊ฐ์ ์ ์ฝํจ
4. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ํด๋์ค ๊ฐ์ฒด๋ผ๋ฉด const ์ฐธ์กฐ ์ฌ์ฉ, ํด๋์ค ์ค๊ณ ์์ฒด๊ฐ ํํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์๊ตฌํจ. ํด๋์ค ๊ฐ์ฒด ๋งค๊ฐ๋ณ์์ ์ ๋ฌ์ ์ฐธ์กฐ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ํ์ค์ด๋ค.
ํจ์๊ฐ ํธ์ถ ํจ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ
1. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๊ธฐ๋ณธ ๋ฐ์ดํฐํ์ด๋ฉด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํจ fixit(&x)์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๋ฉด (x๋ intํ), ์ด ํจ์์ ๋ชฉ์ ์ x์ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒ์ด ๋ถ๋ช ํจ
2. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ด๋ฉด ์ ์ผํ ์ ํ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
3. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๊ตฌ์กฐ์ฒด์ด๋ฉด ์ฐธ์กฐ ๋๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค.
4. ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ํด๋์ค ๊ฐ์ฒด์ด๋ฉด ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๋ํดํธ ๋งค๊ฐ๋ณ์
๋ํดํธ ๋งค๊ฐ๋ณ์๋ ํจ์ ํธ์ถ์์ ์ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ์ ๊ฒฝ์ฐ์ ์ค์ ๋งค๊ฐ๋ณ์ ๋์ ์ฌ์ฉ๋๋ ๊ฐ์ด๋ค.
์๋ฅผ ๋ค์ด, void wow(int n)์์ n์ด 1๋ก ๋ด์ ๋๋๋ก ๋ํดํธ ๊ฐ์ ์ ์ฅํ๋ค๋ฉด, ์ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ wow() ํจ์ ํธ์ถ์ wow(1)๊ณผ ๊ฐ์
๋ํดํธ ๊ฐ์ ํจ์ ์ํ์์ ์ค์ ํจ
char * left(const char * str,int n=1);
๋งค๊ฐ๋ณ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ํดํธ ๋งค๊ฐ๋ณ์๋ฅผ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ ์์๋ก ์ฒจ๊ฐํด์ผ ํจ
int harpo(int n,int m=4,int j=5); // ๋ง๋ค
int chico(int n,int m=6,int j); //ํ๋ฆฌ๋ค
int groucho(int k=1,int m=2,int n=3); //๋ง๋ค
์ค์ ๋งค๊ฐ๋ณ์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ฉด์ ํด๋นํ๋ ํ์ ๋งค๊ฐ๋ณ์์ ๋์ ๋๋ค ๋งค๊ฐ ๋ณ์๋ฅผ ๊ฑด๋๋ธ ์๋ ์๋ค.
beeps=harpo(3, ,8);//ํ๋ฆฌ๋ค
ํจ์ ์ค๋ฒ ๋ก๋ฉ
ํจ์ ์ค๋ฒ ๋ก๋ฉ์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ ํจ์์ ๋คํ์, ์๋ก ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ ํจ์๊ฐ ํ๋์ ์ด๋ฆ์ ๊ณต์ ํ๋ ๊ฒ์ด๋ค.
ํจ์ ์ค๋ฒ ๋ก๋ฉ์ ์ด์ ๋ ํจ์์ ๋งค๊ฐ๋ณ์ ๋ฆฌ์คํธ์ด๋ค. ์ด๊ฒ์ ํจ์ ์๊ทธ๋ด์ฒ๋ผ๊ณ ํ๋ค.
๋ง์ฝ ๋ ํจ์๊ฐ ๊ฐ์ ๊ฐ์, ๊ฐ์ ๋ฐ์ดํฐํ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋งค๊ฐ๋ณ์์ ์์๊น์ง ๋์ผํ๋ค๋ฉด, ๋ ํจ์์ ์๊ทธ๋ด์ฒ๋ ๊ฐ์
c++์์๋ ์๋ก ๋ค๋ฅธ ์๊ทธ๋ด์ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํจ์๋ค์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ์ํ ์ ์๋ค. ์ด๋ค ์๊ทธ๋ด์ฒ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์์ ์ข ๋ฅ๊ฐ ๋ค๋ฆ.
void print(const char * str,int width); //#1
void print(double d,int width); //#2
void print(long l,int width); //#3
void print(int i,int width); //#4
void print(const char *str); //#5
์ฌ์ฉ์๊ฐ ์ด๋ค printf() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ปดํ์ผ๋ฌ๊ฐ ๊ทธ๊ฒ๊ณผ ๋์ผํ ์๊ทธ๋ด์ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํจ์ ์ํ์ ์ฐพ์์ค๋ค.
print("Pancakes",15); //#1 ์ฌ์ฉ
print("Syrup"); //#5 ์ฌ์ฉ
print(1999.0,10); //#2 ์ฌ์ฉ
print(1999,12); //#4 ์ฌ์ฉ
print(1999L,15); //#3 ์ฌ์ฉ
์ค๋ฒ ๋ก๋ฉ๋ ํจ์๋ฅผ ์ฌ์ฉํ ๋์๋, ํจ์ ํธ์ถ์์ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋์ง ํ์ธํด์ผ ํจ
unsigned int year=3210;
print(year,6); // ๋ชจํธํ ํจ์ ํธ์ถ
printf() ํจ์์ ์ด๋ฌํ ํธ์ถ์ ๋์ํ๋ ์ํ์ด ์๋ค.
๋์ํ๋ ์ํ์ด ์์ ๊ฒฝ์ฐ, c++์ ํ์ค์ ์ธ ๋ฐ์ดํฐํ ๋ณํ์ ์๋ํ์ฌ ์ด๋ป๊ฒ๋ ๋์์ด ์ด๋ฃจ์ด์ง๋๋ก ๋ ธ๋ ฅํ๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ์ํ ์ค์์ ์ด๋ ๊ฒ์ด ์ฌ์ฉ๋ ์ง ์ฅ๋ดํ ์ ์์ -> ์๋ฌ
์๊ทธ๋ด์ฒ๋ค์ ์๋ก ๋ค๋ฅธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ผ๋ ํจ๊ป ๊ณต์กดํ ์ ์์
double cube(double x);
double cube(double &x);
-> ์ปดํ์ผ๋ฌ๋ ์ด๋ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ ์ง ์์ง ๋ชปํจ
์ปดํ์ผ๋ฌ๋ ์ด๋ค ๋ฐ์ดํฐํ์ ๋ํ ์ฐธ์กฐ์ ๊ทธ ๋ฐ์ดํฐํ ์์ฒด๋ฅผ ๊ฐ์ ์๊ทธ๋ด์ฒ๋ก ๊ฐ์ฃผํจ
๋์ํ๋ ํจ์๋ฅผ ์ฐพ๋ ๊ณผ์ ์์ const์ const๊ฐ ์๋ ๋ณ์๋ ๊ตฌ๋ณ๋จ
void dribble(char * bits); // #1 ์ค๋ฒ ๋ก๋ฉ๋จ
void dribble(const char * cbits); // #2 ์ค๋ฒ ๋ก๋ฉ๋จ
void dabble(char * bits); // #3 ์ค๋ฒ ๋ก๋ฉ X
void drivel(const char * bits); // #4 ์ค๋ฒ๋ก๋ฉ X
const char p1[20]="How's the weather?";
char p2[20] = "How's business?";
dribble(p1); //#2 dribble(const char *);
dribble(p2); //#1 dribble(char *);
dabble(p1); // ๋์ํ๋ ์ํ X
dabble(p2); //#3 dabble(char *);
drivel(p1); //#4 drivel(const char *);
drivel(p2); //#4 drivel(const char *);
ํจ์ ์ค๋ฒ ๋ก๋ฉ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ํจ์์ ๋ฐ์ดํฐํ์ด ์๋๋ผ ์๊ทธ๋ด์ฒ์ด๋ค.
long gronk(int n,float m); //๊ฐ์ ์๊ทธ๋ด์ฒ ์ด๋ฏ๋ก ๊ณต์กด X
double gronk(int n,float m); //๊ฐ์ ์๊ทธ๋ด์ฒ ์ด๋ฏ๋ก ๊ณต์กด X
ํจ์ ์ค๋ฒ ๋ก๋ฉ์ ์ธ์ ์ฌ์ฉํ๋๊ฐ?
ํจ์ ์ค๋ฒ๋ก๋ฉ์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐํ์ ๋์์ผ๋ก ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ฐ์ ์์ ์ ์ํํ๋ ํจ์๋ค์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํจ