์ฐธ์กฐ(Reference)
1. ์ฐธ์กฐ์ ํ๊ธฐ
A Reference Is an Alias
์ฐธ์กฐ๋ ๊ฐ์ฒด(๋ฐ ๋ณ์)๋ค์ ๋ณ์นญ์ด๋ฉฐ ์๋์ฒ๋ผ ์ ์์ ๋์์ ์ด๊ธฐํ๋์ด์ผํ๋ค.
int ival = 1024;
int &refVal = ival; // refVal refers to (is another name for) ival
int &refVal2; // !!!error: a reference must be initialized
// ok: refVal3 is bound to the object to which refVal is bound, i.e., to ival
int &refVal3 = refVal;
// initializes i from the value in the object to which refVal is bound
int i = refVal; // ok: initializes i to the same value as ival
int &refVal4 = 10; // !!!error: initializer must be an object
double dval = 3.14;
int &refVal5 = dval; // !!!error: initializer must be an int object
- ์ฐธ์กฐ๋ ์ ์์ ๋์์ ์ด๊ธฐํ ๋๋ค.
- ์ฐธ์กฐ๋ r-value ๋ฐ
NULL
๊ฐ์ผ๋ก ์ด๊ธฐํํ ์ ์๋ค(์ฐธ์กฐ ๋งค๊ฐ์ธ์๋ก๋ r-value,NULL
๋ถ๊ฐ). - ์ฐธ์กฐ๋ ์ด๊ธฐํ ๋ ๋ ๊ฐ์ด ๋ณต์ฌ๋๋๊ฒ์ด ์๋๋ผ ์ฐ๊ฒฐ(bind)๋๋ค.
- ํ๋ฒ ์ด๊ธฐํ๋๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค.
2. const์ ์ฐธ์กฐ
void func(obj &a, const obj &b, obj const &c){...}
a
:a
์ ์ฐธ์กฐ ๋ณ๊ฒฝ ๋ถ๊ฐ(์ฐธ์กฐ์ ํน์ฑ).func
์์a
์ ๋งด๋ฒ ๋ณ๊ฒฝ์ ๋ฐ์๋ ๋ฐ์๋จb
:b
์ ์ฐธ์กฐ ๋ณ๊ฒฝ ๋ถ๊ฐ(์ฐธ์กฐ์ ํน์ฑ),func
๋ด๋ถ์์ b์ ๋ด์ฉ ์์ ๋ถ๊ฐ(const
์ ํน์ฑ) <-const
์ฐธ์กฐc
:c
์ ์ฐธ์กฐ ๋ณ๊ฒฝ ๋ถ๊ฐ(์ฐธ์กฐ,const
์ ํน์ฑ) <- ์๋ฏธ ์์.
3. ์ฐธ์กฐ์ ํฌ์ธํฐ์ ์ฐจ์ด(์ฐธ์กฐ์ ํ์์ฑ)
ํฌ์ธํฐ๋ ํน์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ ํ ๋นํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์
- ๊ณต๊ฐ(๋ฉ๋ชจ๋ฆฌ)๋ฅผ ์ฐจ์งํ๋ค.
- ๊ทธ ๊ณต๊ฐ์๋ ์ฌ๋ฌ ๊ฐ์ด ๋ค์ด๊ฐ์ ์๋ค(
const
๊ฐ ์๋ค๋ฉด). - ์ด๋ ํ ์ฃผ์๋ ๋ค์ด๊ฐ์ ์์ผ๋ฏ๋ก
NULL
๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ค.
๋ฐ๋ผ์ ์ฐธ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ํฌ์ธํฐ๋ณด๋ค ์ ๋ฆฌํ๋ค
- ํจ์์ ๋งค๊ฐ์ธ์๋ก์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๊ฐ์ฒด/๊ตฌ์กฐ์ฒด๋ฅผ ๋ณต์ฌํ์ง ์์ผ๋ฏ๋ก ์ฑ๋ฅ์ด ํฅ์๋๋ค. ๋ค๋ง, ๋ณ๊ฒฝ ์์ด ์ฌ์ฉ๋ง ํ๋๊ฒฝ์ฐ
const
ํค์๋๋ฅผ ๋ถ์ด๋๊ฑธ ์ํํํ๋ค. NULL
๊ฐ์ด ์๋์ ๋ณด์ฅํด์ค๋ค.- ๋งค๊ฐ์ธ์๋ก์ ์ฐธ์กฐ๋ ๊ฐ์ฒด ๊ทธ ์์ฒด์ด๋ฏ๋ก
*
,->
(์ญ์ฐธ์กฐ)๋ฑ์ด ์์ด์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ์ค์ ๊ฐ๋ฅ์ฑ์ด ์ ์ด์ง๋ค.
์ฐธ๊ณ : C++ Primer 5th, ์๋ ์ฝ๋ฉ
4. ๋ค์์คํ์ด์ค, std, stream
4.1 ๋ค์์คํ์ด์ค
- ๋ค์ ์คํ์ด์ค : ๊ฐ์ฒด(๊ฐ์ฒด์๋)๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ๋ฒ์. ํด๋์ค, ๋งด๋ฒ๋ค์ ๊ตฌ๋ถํ ์ ์๋ ์์ญ์ด๋ค.
- namespace1::func() : namespace1์ด๋ผ๋ ๋ค์์คํ์ด์ค์ func()
- namespace2::func() : namespace2์ด๋ผ๋ ๋ค์์คํ์ด์ค์ func()
- ์ค์ฝํ ๋ถ์ ์ฐ์ฐ์(::) : ํน์ ๋ค์์คํ์ด์ค์์ ์๋ณ์๋ฅผ ์ฐพ๊ฒ ํ๋ ์ฐ์ฐ์.
- std : c++์ ํ์ค๋ผ์ด๋ธ๋ฌ๋ผ๋ค์ด ๋ค์ด์๋ namespace.
4.2 stream
5. fiostream๊ณผ stringstream
fiostream์ฌ์ฉ๋ฒ. ์ฌ์ฉํ ํจ์
5.2 stringstream
#include
The sstream header defines three types to support in-memory IO; these types read from or write to a string as if the string were an IO stream.
์ด ํ์ ์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด์ I/O stream์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. fiostream์ I/O ๋ฒํผ์ ์ ๊ทผํ๋ฉฐ ์์ ํ๋๊ฑด ๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ๋งค๋ฒ ์ ์ํ๋ฉฐ ์์ ํ๋ ๊ฒ์ด๋ค. ์ด๋ ๋ง์ ์์๊ณผ ์๊ฐ์ ๋ญ๋น์ด๋ฏ๋ก, I/O๋ฒํผ์ ๋ด์ฉ์ ์ต๋ํ stringstream์ผ๋ก ์ฎ๊ฒจ์์ ๋ฉ๋ชจ๋ฆฌ์์ ์์ ํ๋๊ฒ ์ฌ๋ฌ๋ชจ๋ก ์ ๋ฆฌํ๋ค.
์ด์ธ์๋ ๋ณํ, ์นํโฆ์ ๋ฆฌํ ๋ถ๋ถ์ ๋ํด ์ถ๊ฐ ์ ๋ฆฌ stringstream ์ฌ์ฉ๋ฒ ์์ ๋งํฌ :
https://bigpel66.oopy.io/library/42/inner-circle/12 https://modoocode.com/215