Weitere รคhnliche Inhalte รhnlich wie 2013 C++ Study For Students #1 (20) 2013 C++ Study For Students #12. ์งํ์ ์๊ฐ
โข ์ฅ์ฐฌํธ
โข
ํ) KAIST ์ ์ฐํ๊ณผ ์์ฌ๊ณผ์
โข
ํ) ์์ด์ฝ์ถํ์ฌ ์ญ์
โข
ํ) ์ธ๋ ๊ฒ์ ๊ฐ๋ฐํ Game Drunker ํ์ฅ
โข
์ ) ๊ฒฝ๋ถ๋ํ๊ต ์ปดํจํฐํ๋ถ ์กธ์
โข
์ ) ์ค๋งํธ๋น์ ์ธํด โ ์๋๋ก์ด๋ ํ๋ก๊ทธ๋๋จธ
โข
์ ) ๊ฒฝ๋ถ๋ํ๊ต ์ปดํจํฐํ๋ถ ์์คํ
๊ด๋ฆฌ์์์ฅ
โข
์ ) ์์ฌ๊ณ ๋ฑํ๊ต ์กธ์
5. C++๋ ์์์ โHELLO, WORLDโ
โข // helloworld.cpp
#include <iostream>
int main()
{
std::cout << โHello, World!โ << std::endl;
return 0;
}
6. ์ฃผ์
โข ์ฃผ์์ ํ์ํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
โข
// helloworld.cpp : ์ฌ๋์ ๋ ๊ฐ๋ฅผ ๊ฒน์ณ ์จ์ ๊ทธ ๋ค์ ๋ฐ๋ผ์ค๋ ๋ฌธ์๋ค์ ๊ทธ ์ข
๋ฅ์ ๊ด๊ณ์์ด (์ค ๋ฐ๊ฟ ๋ฌธ์๋ฅผ
์ ์ธํ๊ณ ) ๋ชจ๋ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ.
โข
C ์ธ์ด์ ์ฃผ์ : /*๋ก ์์ํ๊ณ */๋ก ๋๋๋ ๊ตฌ๊ฐ์ ์ค ๋ฐ๊ฟ์ ํฌํจํด์ ๋ชจ๋ ์ฃผ์ ์ฒ๋ฆฌ.
โข
/* ์ปดํ์ผ๋ฌ์ ์ํด ๋ฌด์๋๋
* ์ฌ๋ฌ ์ค์ ๊ฑธ์น
* C ์คํ์ผ ์ฃผ์
*/
7. ์ ์ฒ๋ฆฌ ์ง์์
โข C++ ํ๋ก๊ทธ๋จ์ ์ธ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ๋น๋(Build)๋๋ค.
โข
์ ์ฒ๋ฆฌ(Preprocess) ์์
: ์ฝ๋ ๋ด์์ ์ง์๋ ๋ฉํ ์ ๋ณด๋ฅผ ์ธ์ํ์ฌ ์๋์ผ๋ก ์ฝ๋๋ฅผ ์์ .
โข
์ปดํ์ผ(Compile) ์์
: ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ.
โข
๋งํฌ(Link) ์์
: ๊ธฐ๊ณ์ด๋ก ๋ ์ฌ๋ฌ ์ค๋ธ์ ํธ ํ์ผ์ ๋ฌถ์ด์ ํ๋์ ์คํ ํ์ผ๋ก ๋ง๋ฆ.
โข ์ ์ฒ๋ฆฌ ์ง์์๋ ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ๊ฒ. # ๋ฌธ์๋ก ์์.
โข
#include <iostream> ๊ตฌ๋ฌธ์ ์ ์ฒ๋ฆฌ ์ง์์ #include๋ฅผ ํตํด <iostream> ํค๋ ํ์ผ์ ์ฝ๋๋ฅด ๋ชจ๋ ๊ฐ์ ธ์
ํ์ฌ ์์ค์ ์ฝ์
ํ๋๋ก ์ง์.
โข
ํค๋ ํ์ผ์ ๋ณดํต ๋ค๋ฅธ ํ์ผ์ ๊ตฌํ(Define)๋ ํจ์๋ค์ ํจ์ ์ ์ธ(Declare)๋ฌธ์ ๋ด๊ณ ์์ด์ ๊ทธ ํจ์๋ค์ ํ์ฌ
์์ค์์ ์ฐธ์กฐํ์ฌ ํธ์ถํ ์ ์๋๋ก ์ปดํ์ผ๋ฌ์ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ์ฉ๋๋ก ํ์ฉ.
8. ์ ์ฒ๋ฆฌ ์ง์์
โข ์์ฃผ ์ฌ์ฉํ๋ ์ ์ฒ๋ฆฌ ์ง์์
โข
#include [ํ์ผ๋ช
] : ์ง์ ๋ ํ์ผ์ ๋ด์ฉ์ ํ์ฌ ์์ค ํ์ผ์ ํด๋น ์ง์์๊ฐ ์์นํ ๊ณณ์ ์ฝ์
.
โข
#define [key] [value] : ์ง์์ ์ดํ์ ๋ค๋ฐ๋ฅด๋ ๋ชจ๋ key ํค์๋๋ฅผ value๋ก ์นํ.
โข
#ifdef [key], #ifndef [key], #endif : ํน์ ํค์๋๊ฐ #define ๋ฌธ์ด๋ ์ปดํ์ผ๋ฌ ์ต์
์ผ๋ก ์ ์๋์ด ์๋์ง
์ฌ๋ถ์ ๋ฐ๋ผ ํด๋น ์กฐ๊ฑด ๋ธ๋ก์ ์ฝ๋๋ฅผ ํ์ฑํ / ๋นํ์ฑํ์ํด.
โข
#pragma [xyz] : [xyz] ๋ถ๋ถ์ ์ปดํ์ผ๋ฌ๋ง๋ค ๋ค๋ฅธ๋ฐ, ์ธ์ด ์ฐจ์์์ ํ์คํ๋์ง ์๊ณ ํน์ ์ข
๋ฅ์
์ปดํ์ผ๋ฌ์์๋ง ์ง์๋๋ ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์.
9. MAIN() ํจ์
โข main() ํจ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ๊ฐ์ฅ ๋จผ์ ํธ์ถ๋๋ ์์์ .
โข
int ํ์
๋ฆฌํด๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ํ๋ฅผ ์๋ ค์ฃผ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋จ.
โข main() ํจ์๋ ํ๋ผ๋ฏธํฐ ์์ด ํธ์ถ๋ ์๋ ์๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์๋ ์์.
โข
int main(int argc, char* argv[])
โข
argc๋ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ๋ช
๋ น์ค์์ ๋๊ฒจ์ง ํ๋ผ๋ฏธํฐ์ ๊ฐ์.
โข
argv๋ ๊ฐ ํ๋ผ๋ฏธํฐ์ ๋ฌธ์์ด ๊ฐ์ด ๋ค์ด ์์.
โข
ํ๋ก๊ทธ๋จ์ ์ด๋ฆ๋ ํ๋ผ๋ฏธํฐ์ ํฌํจ๋์ด ์ ์ผ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ทจ๊ธ.
10. I/O ์คํธ๋ฆผ
โข ์คํธ๋ฆผ ์ถ๋ ฅ ๊ธฐ๋ฅ : std::cout
โข
์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ๋ฐ์ด ๋ฃ๋๋ค๊ณ ์๊ฐ.
โข
<< ์ฐ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ๋ฐ์ด ๋ฃ๋ ์ญํ .
โข
๋ค์ํ ํ์
์ ๋ฐ์ดํฐ๋ฅผ << ์ฐ์ฐ์๋ก ๋ฐ์ด ๋ฃ์ ์ ์์.
โข
std::cout << โThere are โ << 219 << โways I love you.โ << std::endl;
โข
std::endl์ ์ถ๋ ฅํ ๋ฉ์์ง์ ํ ์ค์ด ๋๋ฌ์์ ์๋ ค์ค.
โข
์ค ๋ฐ๊ฟ์ ํ๊ธฐ ์ํด n ๋ฌธ์(์ค ๋ฐ๊ฟ์ ์๋ฏธํ๋ ํน์ ๋ฌธ์(Escape Character))๋ฅผ ์ฌ์ฉํ ์๋ ์์.
โข
n : ์ค ๋ฐ๊ฟ, r : ์บ๋ฆฌ์ง ๋ฆฌํด(์ถ๋ ฅ ์ปค์๋ฅผ ์ฒ์์ผ๋ก ์ฎ๊น), t : ํญ ๋ฌธ์, : ์ญ์ฌ๋์ ๋ฌธ์, โ : ๋ฐ์ดํ
11. I/O ์คํธ๋ฆผ
โข ์คํธ๋ฆผ ์
๋ ฅ ๊ธฐ๋ฅ : std::cin
โข
>> ์ฐ์ฐ์๋ฅผ ์
๋ ฅ ์คํธ๋ฆผ์ ์ ์ฉ.
โข
์ฌ์ฉ์์ ํค๋ณด๋ ์
๋ ฅ์ ๋ฐ๋ ๋ฐ ์ด์ฉํ ์ ์์.
โข
์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ์ ๋ ์
๋ ฅ๋ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํ์
์ธ์ง ์ ์ ์์ผ๋ฏ๋ก ๊น๋ค๋ก์ด ๋ฉด์ด ์์.
12. ๋ค์์คํ์ด์ค
โข ์ฝ๋ ๋ด์์ ์ด๋ฆ์ด ๊ฐ์ ๋ณ์๋ช
์ด๋ ํจ์๋ช
์ด ์๋ก ์ถฉ๋ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋จ.
โข
์๋ฅผ ๋ค์ด foo() ํจ์๋ฅผ ๋ง๋ค์ด ๋๊ณ , ๋์ค์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ ์ํฉ์ด ๋์ด์ ์ด์ฉํ๋ ค๊ณ
๋ดค๋๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ foo() ํจ์๊ฐ ์์ ๋, ์ปดํ์ผ๋ฌ ์
์ฅ์์๋ ์ด๋ foo() ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง
์์๋ผ ๋ฐฉ๋ฒ์ด ์์.
โข
๋ค์์คํ์ด์ค๋ ํน์ ์ฝ๋ ์์ญ์์ ์ฐธ์กฐํ๋ ์ด๋ฆ์ ์ด๋ ์ด๋ฆ ์งํฉ์์ ์ฐพ์์ผ ํ๋์ง ๋ฒ์๋ฅผ ์ ์ํ๋ ์๋จ.
โข
ํน์ ํจ์๋ฅผ ํน์ ๋ค์์คํ์ด์ค์ ์ข
์์ํค๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ค์์คํ์ด์ค ๋ธ๋ก์ผ๋ก ๋๋ฌ์.
โข
โข
namespace mycode
{
void foo();
}
ํจ์ ์ ์ธ๋ฟ ์๋๋ผ ํจ์ ๊ตฌํ ๋ณธ์ฒด๋ ๋ค์์คํ์ด์ค ์๋์ ๋ ์ ์์.
13. ๋ค์์คํ์ด์ค
โข ๋ค์์คํ์ด์ค ์๋์ ์ ์ธ๋ foo() ํจ์๋ฅผ ํธ์ถํ ๋๋ ๋ค์์คํ์ด์ค์ ::๋ฅผ ์ ์ฒจ์๋ก ๋ง๋ถ์.
โข
::์ ๊ฐ์ ์ฒจ์๋ฅผ ์ค์ฝํ ์ค์ ์ฐ์ฐ์(Scope Resolution Operator)๋ผ๊ณ ํจ.
โข
โข
mycode::foo(); // โmycodeโ ๋ค์์คํ์ด์ค์ ์ํ โfooโ ํจ์์ ํธ์ถ
๋ค์์คํ์ด์ค ์ฌ์ฉ์ ๋ช
์์ ์ผ๋ก ์ ์ธํ๋ฉด ๊ทธ ์๋์ ์๋ ์ฝ๋์์๋ ์ค์ฝํ ์ค์ ์ฐ์ฐ์ mycode::๋ฅผ ๋ถ์ด์ง
์์๋ mycode ๋ค์์คํ์ด์ค์ ์ํ ์ด๋ฆ(ํจ์๋ช
, ๋ฐ์ดํฐ ํ์
/ ๋ณ์๋ช
๋ฑ)์ ๋ถ๋ฌ๋ค ์ธ ์ ์์.
โข
using namespace mycode;
int main()
{
foo(); // mycode::foo();์ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ง
return 0;
}
14. ๋ค์์คํ์ด์ค
โข Hello, World ์์ ์์๋ ๋ค์์คํ์ด์ค๊ฐ ์ด์ฉ๋จ.
โข
cout๊ณผ endl์ ๋ค์์คํ์ด์ค std์ ์ํ ๊ฒ๋ค์ด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด using ์ง์์๋ก ๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ๋ฉด
๊ฐ๋ณ์ ์ผ๋ก ์ค์ฝํ ์ค์ ์ฐ์ฐ์ std::๋ฅผ ์ฌ์ฉํ์ง ์์๋ cout๊ณผ endl์ ์ด์ฉํ ์ ์์.
โข
#include <iostream>
using namespace std;
int main()
{
cout << โHello, World!โ << endl;
return 0;
}
โข using ์ง์์๋ ๋ค์์คํ์ด์ค์ ์ํ ์ด๋ฆ์ ํน์ ํด์ ์ง์ ํ ์๋ ์์.
โข
์๋ฅผ ๋ค์ด ๋ค์์คํ์ด์ค std์ cout๋ง์ ์ค์ฝํ ์ค์ ์ฐ์ฐ์ ์์ด ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ.
โข
using std::cout;
15. ๋ณ์
โข C++์์ ๋ณ์๋ ์ฝ๋ ๋ด ์ด๋์๋ ์ ์ธํ ์ ์๊ณ , ์ ์ธํ ์ดํ์๋ ํด๋น ์ ์ธ์ด ์ํ ๋ธ๋ก ๋ด์ ์ ์ธ
์ดํ ์ฝ๋์์ ๊ทธ ๋ณ์์ ์ ๊ทผํ ์ ์์.
โข
์ด๊น๊ฐ์ ์ค์ ํ์ง ์๊ณ ๋ ๊ฐ๋ฅํ๋ฉฐ, ๊ทธ๋ ๊ฒ ํ๋ฉด ๋ณ์๊ฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ ๋ค์ด ์๋ ๊ฐ์ด ์ฌ์ฉ๋จ.
โข
๋ช
์์ ์ธ ์ด๊น๊ฐ ์ค์ ์ด ์๋ ๋ณ์ ์ ์ธ์ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ํผํ๋ ๊ฒ์ด ์ข์.
โข
int uninitializedInt;
int initializedInt = 7;
cout << uninitializedInt << โ is a random valueโ << endl;
cout << initializedInt << โ was assigned an initial valueโ << endl;
16. ๋ณ์
โข C++์์ ํํ๊ฒ ์ด์ฉํ๋ ๋ณ์ ํ์
.
โข
int : ์์ / ์์ ์ ์. ํํ ๊ฐ๋ฅํ ํฌ๊ธฐ๋ ์ปดํ์ผ๋ฌ์ ๋ฐ๋ผ ๋ค๋ฆ. โ int i = 7;
โข
short (int) : ์์ ์์ / ์์ ์ ์(๋ณดํต 2๋ฐ์ดํธ ํฌ๊ธฐ). โ short s = 13;
โข
long (int) : long ์ ์(๋ณดํต 4๋ฐ์ดํธ ํฌ๊ธฐ). โ long l = -7;
โข
[C++ 11] long long (int) : long long ์ ์. ํํ ๊ฐ๋ฅํ ํฌ๊ธฐ๋ ์ปดํ์ผ๋ฌ์ ๋ฐ๋ผ ๋ค๋ฅด๋ ์ต์ long ์ ์
์ด์์ผ๋ก ๋ณดํต 8๋ฐ์ดํธ ํฌ๊ธฐ์. โ long long ll = 14;
โข
unsigned int / unsigned short (int) / [C++ 11] unsigned long (int) / [C++ 11] unsigned long long (int) :
0์ ํฌํจํ ์์๋ง ํํ ๊ฐ๋ฅํ ์ ์. โ unsigned int i = 2; unsigned short s = 23;
17. ๋ณ์
โข C++์์ ํํ๊ฒ ์ด์ฉํ๋ ๋ณ์ ํ์
.
โข
float : ๋ถ๋์์์ ์ซ์. โ float f = 7.2f;
โข
double : ๋ฐฐ์ ๋ ์ ๋ฐ๋ ๋ถ๋์์์ ์ซ์. ์ต์ํ ๋ถ๋์์์ ์ด์์ ์ ๋ฐ๋ ํํ ๊ฐ๋ฅ. โ double d = 7.2;
โข
long double : long ๋ฐฐ์ ๋ ์ ๋ฐ๋ ๋ถ๋์์์ ์ซ์. ์ต์ํ double ์ด์์ ์ ๋ฐ๋ ํํ ๊ฐ๋ฅ. โ long double
d = 16.98L;
โข
char : 8๋นํธ ๋ฌธ์. โ char ch = โmโ;
โข
[C++ 11] char16_t : 16๋นํธ ๋ฌธ์. โ char16_t c16 = uโmโ;
โข
[C++ 11] char32_t : 32๋นํธ ๋ฌธ์. โ char32_t c32 = Uโmโ;
โข
wchar_t : ์์ด๋ ๋ฌธ์๋ก ์ปดํ์ผ๋ฌ์ ๋ฐ๋ผ ๋ค๋ฆ. โ wchar_t w = Lโmโ;
18. ๋ณ์
โข C++์์ ํํ๊ฒ ์ด์ฉํ๋ ๋ณ์ ํ์
.
โข
bool : ์ฐธ(true) ๋๋ ๊ฑฐ์ง(false)๋ฅผ ๋ํ๋ด๋ ๋
ผ๋ฆฌ ํ์
. โ bool b = true;
โข
[C++ 11] auto : ์ปดํ์ผ๋ฌ์ ์ํด ์๋์ผ๋ก ํ์
์ด ์ ํด์ง๋ ํ์
. โ auto i = 7; // i๋ ์๋์ผ๋ก intํ์ด ๋จ
โข
[C++ 11] decltype(expr) : โexprโ์ด ๋ํ๋ด๋ ํ์
๊ณผ ๊ฐ์ ํ์
์ ๋ฐ๋ฅด๋ ํ์
. โ int i = 7; decltype(i) j = 8;
// j๋ i์ ํ์
์ ๋ฐ๋ผ int๊ฐ ๋จ
19. ๋ณ์
โข C++์์๋ ๋ช
์์ ์ธ ๋ณ์ ํ์
์บ์คํ
์ ์ํด ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ง์.
โข
1. ๋ณ์ ์์ ์บ์คํ
ํ ํ์
์ ๊ดํธ๋ก ๋ช
์.
โข
โข
2. ํ์
์์ฑ์ ํจ์๋ฅผ ์ด์ฉ.
โข
โข
bool someBool = (bool)someInt;
bool someBool = bool(someInt);
3. ์บ์คํ
์ฐ์ฐ์๋ฅผ ์ด์ฉ.
โข
bool someBool = static_cast<bool>(someInt);
โข int ๋ณ์์ ๊ฐ์ด 0์ด๋ฉด false๋ก, 0์ด ์๋๋ฉด true๋ก ๋ณํ.
20. ๋ณ์
โข Coerced ์บ์คํ
: ์ด๋ค ์ํฉ์์๋ ๋ณ์์ ํ์
์บ์คํ
์ด ์๋์ผ๋ก ์ผ์ด๋ ์๋ ์์.
โข
์๋ฅผ ๋ค์ด short ํ์
๋ณ์๋ long ํ์
๋ณ์๋ก ๋ช
์์ ์ธ ํ์
์บ์คํ
์์ด๋ ์๋์ผ๋ก ์บ์คํ
๋ ์๋ ์์.
โข
์๋ํ๋ฉด long ํ์
์ short ํ์
๊ณผ ๊ฐ์ด ์ ์๋ฅผ ํํํ๋ฉด์๋ ๊ทธ ํํ ๋ฒ์๊ฐ ๋ ๋๊ธฐ ๋๋ฌธ.
โข
long someLong = someShort; // ๋ช
์์ ์ธ ํ์
์บ์คํ
์ด ์์ด๋ ๋๋ค.
โข ๋ณ์๊ฐ ์๋์ผ๋ก ํ์
์บ์คํ
๋ ๋ ๋ฐ์ดํฐ์ ์์ค์ด ์๋์ง ๊ณ ๋ คํด์ผ ํจ.
โข
์๋ฅผ ๋ค์ด float ๋ณ์๊ฐ int ๋ณ์๋ก ์บ์คํ
๋๋ค๋ฉด ์์์ ์ดํ ๊ฐ๋ค์ ์์ด๋ฒ๋ฆฌ๊ฒ ๋จ.
21. ์ฐ์ฐ์
โข C++ ์ฐ์ฐ์์๋ ์ดํญ ์ฐ์ฐ์(๋ ๊ฐ์ ๋ณ์๋ฅผ ๋์์ผ๋ก ํ๋ ์ฐ์ฐ์)์ ๋จํญ ์ฐ์ฐ์(ํ๋์ ๋ณ์๋ฅผ
๋์์ผ๋ก ํ๋ ์ฐ์ฐ์) ๊ทธ๋ฆฌ๊ณ ์ผํญ ์ฐ์ฐ์(์ธ ๊ฐ์ ๋ณ์๋ฅผ ๋์์ผ๋ก ํ๋ ์ฐ์ฐ์)๊ฐ ์์.
โข C++ ์ฐ์ฐ์์ ์ข
๋ฅ
โข
= : ์ดํญ ์ฐ์ฐ์๋ก ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ์ ์ผ์ชฝ์ ์๋ ๋ณ์๋ก ๋์
. โ int i; i = 3; int j; j = i;
โข
! : ๋จํญ ์ฐ์ฐ์๋ก, true / false ๋
ผ๋ฆฌ๊ฐ์ ๋ฐ์ . โ bool b = !true; bool b2 = !b;
โข
+ : ๋ง์
์ ์ํ ์ดํญ ์ฐ์ฐ์. โ int i = 3 + 2; int j = i + 5; int k = i + j;
โข
-, *, / : ๊ฐ๊ฐ ๋บ์
, ๊ณฑ์
, ๋๋์
์ ์ํ ์ดํญ ์ฐ์ฐ์. โ int i = 5 โ 1; int j = 5 * 2; int k = j / i;
โข
% : ์ ์ ๋๋์
์์์ ๋๋จธ์ง ๊ฐ์ ๊ตฌํจ. โ int remainder = 5 % 2;
22. ์ฐ์ฐ์
โข C++ ์ฐ์ฐ์์ ์ข
๋ฅ
โข
++ : ๋ณ์ซ๊ฐ 1์ ์ฆ๊ฐ์ํค๋ ๋จํญ ์ฐ์ฐ์. ์ฐ์ฐ์๊ฐ ๋ณ์ ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด โ์ฌํ ์ฆ๊ฐโ๊ฐ ์ ์ฉ๋์ด ํด๋น ์ฝ๋
๋ผ์ธ์์๋ ์ฆ๊ฐํ๊ธฐ ์ ์ ๊ฐ์ ๊ฐ์ง๋ ๊ทธ ๋ผ์ธ์ ๋ฒ์ด๋๋ฉด 1 ์ฆ๊ฐ. ์ฐ์ฐ์๊ฐ ๋ณ์ ์ผ์ชฝ์ ์์ผ๋ฉด โ์ฌ์ ์ฆ๊ฐโ๊ฐ
์ ์ฉ๋์ด ๋ฐ๋ก ํด๋น ์ฝ๋ ๋ผ์ธ์์ 1 ์ฆ๊ฐํ ๊ฐ์ ๊ฐ์ง. โ i++; ++i;
โข
-- : ๋ณ์ซ๊ฐ์ 1 ๊ฐ์์ํค๋ ๋จํญ ์ฐ์ฐ์. ++์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ์ฐ์ ์์น์ ๋ฐ๋ผ ์ฌํ ๊ฐ์ ๋๋ ์ฌ์ ๊ฐ์๊ฐ ์ ์ฉ.
โ i--; --i;
โข
+=, -=, *=, /=, %= : ๊ฐ๊ฐ i = i + j; i = i โ j; i = i * j; i = i / j; i = i % j;์ ์ถ์ฝํ.
โข
&, &= : ๋ ๋ณ์์ ๊ฐ ๋นํธ ๊ฐ์ AND ์ฐ์ฐ์ ํจ. โ i = j & k; j &= k;
โข
I, I= : ๋ ๋ณ์์ ๊ฐ ๋นํธ ๊ฐ์ OR ์ฐ์ฐ์ ํจ. โ i = j | k; j |= k;
23. ์ฐ์ฐ์
โข C++ ์ฐ์ฐ์์ ์ข
๋ฅ
โข
<<, >>, <<=, >>= : ์ผ์ชฝ ๋ณ์์ ๋นํธ ์ด์ ์ค๋ฅธ์ชฝ ๊ฐ๋งํผ ์ผ์ชฝ(<<) ๋๋ ์ค๋ฅธ์ชฝ(>>)์ผ๋ก ์ํํธ(Shift). โ i =
i << 1; i = i >> 4; i <<= 1; i >>= 4;
โข
^, ^= : ๋ ๋ณ์์ ๊ฐ ๋นํธ ๊ฐ์ ๋ฐฐํ์ ๋
ผ๋ฆฌํฉ(Exclusive OR) ์ฐ์ฐ์ ํจ. โ i = i ^ j, i ^= j;
โข ์ฐ์ฐ ์์์ ์ดํดํ๊ธฐ ์ฌ์ด ์กฐ๊ฐ์ผ๋ก ์ชผ๊ฐ๊ฑฐ๋ ๊ดํธ๋ฅผ ์ด์ฉํ์ฌ ๋ช
์์ ์ผ๋ก ์์๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์.
โข
int i = 34 + 8 * 2 + 21 / 7 % 2;
โข
int i = 34 + (8 * 2) + ((21 / 7) % 2);
โข
int i = 8 * 2;
int j = 21 / 7;
j %= 2;
i = 34 + i + j;
24. ์ฐ์ฐ์
โข #include <iostream>
using namespace std;
int main()
{
int someInteger = 256; short someShort; long someLong;
float someFloat; double someDouble;
someInteger++; someInteger *= 2;
someShort = (short)someInteger; someLong = someShort * 10000;
someFloat = someLong + 0.785; someDouble = (double)someFloat / 100000;
cout << someDouble << endl;
return 0;
}
25. ์ด๊ฑฐ ํ์
โข ์ด๊ฑฐ(Enumeration) ํ์
์ ์ด๋ค ์ซ์๋ค์ ๋์ดํ ์ง ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ง์๋๋ก ์ ํ ์ ์๊ฒ ํด์ค.
โข
์๋ฅผ ๋ค์ด ์ฒด์ค ํ๋ก๊ทธ๋จ์ด๋ผ๋ฉด ๊ฐ๊ฐ์ ๋ง์ ํน์ int ๊ฐ์ ํ ๋นํ์ฌ ๋ง์ ์ข
๋ฅ๋ฅผ ๋ํ๋ด๋ ๊ณ ์ ๋ฒํธ๋ก ์ด์ฉ.
โข
โข
const int kPieceTypeKing = 0;
const int kPieceTypeQueen = 1;
const int kPieceTypeRook = 2;
const int kPieceTypePawn = 3;
// etc
int myPiece = kPieceTypeKing;
์ด์ ๊ฐ์ด ๊ฐ์ ์ ์ํด๋ ๋์ง๋ง, ์๋ชป ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์.
โข
๋ง์ฝ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ ๋ง์ ๊ฐ์ ๋ํด ์ค์๋ก 1์ฉ ๋ํด์ ์ฌ์ฉํ๋ค๋ฉด ์์ด ์๋น๊ฐ ๋์ด ๋ฒ๋ฆผ.
โข
์ต์
์ ์ํฉ์ผ๋ก -1๊ณผ ๊ฐ์ด ์ด๋ ๋ง์ ๊ณ ์ณ๊ฐ๊ณผ๋ ๋งค์นญ์ด ์๋๋ ์๋ฑํ ๊ฐ์ ์ด์ฉํด ๋ฒ๋ฆด ์๋ ์์.
26. ์ด๊ฑฐ ํ์
โข ์ด๊ฑฐ ํ์
์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋์ดํ๋ ๊ฐ ๋ชฉ๋ก๊ณผ ๋ฒ์๋ฅผ ์๊ฒฉํ๊ฒ ๊ด๋ฆฌํจ์ผ๋ก์จ ๋ฐฉ์ง.
โข
typedef enum { kPieceTypeKing, kPieceTypeQueen, kPieceTypeRook, kPieceTypePawn } PieceT;
โข ์ค์ ๋ก ์ด๊ฑฐ ํ์
์ ์ปดํ์ผ๋ฌ ์์์ ์ ์ ํ์
์ผ๋ก ์ฒ๋ฆฌ.
โข
์๋ฅผ ๋ค์ด kPieceTypeKing์ ์ค์ ๊ฐ์ ์ ์ 0.
โข ํ์ง๋ง PieceT์ ๊ฐ๋ฅํ ๊ฐ ๋ชฉ๋ก์ ์ ํจ์ผ๋ก์จ PieceT ํ์
๋ณ์๊ฐ ์ ํด์ง ๊ฐ ๋ชฉ๋ก ์ด๋ฆ ์ด์ธ์ ๊ฐ์ผ๋ก
์ค์ ๋ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ ์ ์๊ฒ ํด์ค.
โข
PieceT myPiece;
myPiece = 0;
27. ์ด๊ฑฐ ํ์
โข ์ด๊ฑฐ ํ์
์ ๊ฐ ํญ๋ชฉ์ ๋ํด ๊ฐ๋ณ์ ์ผ๋ก ํน์ ์ ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒ๋ ๊ฐ๋ฅ.
โข
typedef enum { kPieceTypeKing = 1, kPieceTypeQueen,
kPieceTypeRook = 10, kPieceTypePawn } PieceT;
โข
kPieceTypeKing์ด ๊ฐ 1์ ๋ช
์์ ์ผ๋ก ํ ๋น๋ฐ์๊ธฐ์ ๋ฐ๋ก ๋ค๋ฐ๋ฅด๋ kPieceTypeQueen์ ์ปดํ์ผ๋ฌ์ ์ํด 1 ์ฆ๊ฐํ ๊ฐ
2๋ฅผ ์๋์ผ๋ก ํ ๋น๋ฐ์.
โข
๋ช
์์ ์ผ๋ก 10์ ํ ๋น๋ฐ์ kPieceTypeRook์ ๋ฐ๋ก ๋ค์ ์๋ kPieceTypePawn๋ 1 ์ฆ๊ฐํ 11์ ์๋์ผ๋ก ํ ๋น๋ฐ์.
28. [C++ 11] ์๊ฒฉํ ์ด๊ฑฐ ํ์
โข ์์ ์ค๋ช
ํ ์ด๊ฑฐ ํ์
์ ํ์
์ธ์ดํํ์ง ์์.
โข
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ํ์
์ทจ๊ธ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์๋ก ์์ ๋ณ๊ฐ์ธ ์ด๊ฑฐ ํ์
๊ฐ์ ๋น๊ต ์ฐ์ฐ์ด ๊ฐ๋ฅ.
โข
C++ 11์์๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด enum class๋ฅผ ๋์
.
โข
โข
enum class MyEnum
{
EnumValue1,
EnumValue2 = 10,
EnumValue3
};
MyEnum์ ํ์
์ธ์ดํํ๊ธฐ ๋๋ฌธ์ ์ด๊ฑฐ ๊ฐ์ด ๋ค๋ฅธ ์ ์ ํ์
๋ณ์๋ก ์๋์ผ๋ก ์บ์คํ
๋์ง ์๊ณ class ์ด๋ฆ์ผ๋ก
์ค์ฝํ ์ค์ ์ด ๋์ง ์์ผ๋ฉด ์ฐธ์กฐํ ์๋ ์์.
29. [C++ 11] ์๊ฒฉํ ์ด๊ฑฐ ํ์
โข ์ผ๋ฐ ์ ์ ๊ฐ๊ณผ MyEnum ๊ฐ์ ๋น๊ต๋ C++ 11์์ ๋ฌธ๋ฒ ์๋ฐ.
โข
if (MyEnum::EnumValue3 == 11) { โฆ }
โข ์ด๊ฑฐ ํ์
์ ๊ธฐ๋ณธ์ ์ผ๋ก int ํ์
๊ณผ ์ฐ๊ณ๋์ง๋ง enum class์์๋ ๊ฐ์ ํ์
์ ๋ฐ๊ฟ ์๋ ์์.
โข
enum class MyEnumLong : unsigned long
{
EnumValueLong1,
EnumValueLong2 = 10,
EnumValueLong3
};
30. ๊ตฌ์กฐ์ฒด
โข ๊ตฌ์กฐ์ฒด๋ ๊ธฐ๋ณธ ํ์
๋๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด๋ฅผ ์กฐํฉํ์ฌ ์๋ก์ด ํ์
์ ๋ง๋ค์ด๋.
โข
๊ฐ์ฅ ํํ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋ ํ๋๋ฅผ ๋ํ๋ด๋ ๊ฒ.
โข
์๋ฅผ ๋ค์ด ์ง์์ ์ ์๋ช
์ธ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋ฉด ์ง์๋ณ๋ก ์ด๋ฆ์ ์ฒซ ๊ธ์์ ์ง์ ๋ฑ๋ก ๋ฒํธ, ๊ธ์ฌ ์ ๋ณด๊ฐ
์๋ค๋ฉด ๊ตฌ์กฐ์ฒด๋ก ์ ์ํ์ฌ ํค๋ ํ์ผ์ ๋ ์ ์์.
โข
โข
typedef struct
{
char firstInitial;
char middleInitial;
char lastInitial;
int employeeNumber;
int salary;
} EmployeeT;
EmployeeT ํ์
์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์์ ๊ฐ ํญ๋ชฉ์ ๋ชจ๋ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ๋จ.
31. ๊ตฌ์กฐ์ฒด
โข #include <iostream>
using namespace std;
int main()
{
EmployeeT e;
e.firstInitial = โMโ; e.middleInitial = โRโ; e.lastInitial = โGโ;
e.employeeNumber = 42; e.salary = 80000;
cout << โEmployee: โ << e.firstInitial << e.middleInitial << e.lastInitial << endl;
cout << โNumber: โ << e.employeeNumber << endl;
cout << โSalary: โ << e.salary << endl;
return 0;
}
32. IF/ELSE ๊ตฌ๋ฌธ
โข if ๊ตฌ๋ฌธ์ ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด if ๋ฌธ ์๋ ๋ธ๋ก ๋๋ ๋ธ๋ก์ด ์์ ๊ฒฝ์ฐ ๋ฐ๋ก ํ์๋๋ ๋ผ์ธ์ ์ฝ๋๋ฅผ ์คํ.
โข ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด๋ฉด else ๋ธ๋ก์ ์ฝ๋๋ฅผ ์คํ. else ๋ธ๋ก์ด ์์ผ๋ฉด if ๋ฌธ ๋ธ๋ก์ ํ ์ ์ฝ๋๊ฐ ์คํ.
โข if (i > 4) {
// ์์
์ํ
} else if (i > 2) {
// ๋ค๋ฅธ ์์
์ํ
} else {
// ๋ ๋ค๋ฅธ ์์
์ํ
}
โข if ๋ฌธ์ ๊ดํธ ์์ญ์ ๋ค์ด๊ฐ ๊ตฌ๋ฌธ์ ๋ฐ๋์ ๋ถ(Boolean) ๋ณ์์ด๊ฑฐ๋ ๋ถ ํ์
์ ๊ฒฐ๊ณผ ๊ฐ์ ๊ฐ์ ธ์ผ ํจ.
33. SWITCH ๊ตฌ๋ฌธ
โข switch ๊ตฌ๋ฌธ์ ๋ณ์ซ๊ฐ์ ๋ฐ๋ฅธ ์ฝ๋ ๋ถ๊ธฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค.
โข switch ๊ตฌ๋ฌธ์์๋ ๋ณ์๋ฅผ ์์ซ๊ฐ๊ณผ ๋น๊ตํด์ผ ํ๋ฏ๋ก if ๊ตฌ๋ฌธ์์์ฒ๋ผ โ~๋ณด๋ค ํฌ๊ฑฐ๋ ์์โ๊ณผ ๊ฐ์
์กฐ๊ฑด์ switch ๊ตฌ๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์.
โข ๊ฐ ์์ซ๊ฐ์ case ๊ตฌ๋ฌธ์ ๋์๋์ด ํด๋น ๋ณ์๊ฐ ํน์ ์์ซ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ํด๋น case ๊ตฌ๋ฌธ์ ์ฝ๋๊ฐ break
๊ตฌ๋ฌธ์ ๋ง๋ ๋๊น์ง ์คํ๋จ.
โข ์ด๋ ์์ซ๊ฐ์๋ ํด๋นํ์ง ์์ ๋ ์คํํ ์ฝ๋๊ฐ ์๋ค๋ฉด default ๊ตฌ๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์.
โข break ๊ตฌ๋ฌธ์ ๋น ๋จ๋ฆฌ๋ฉด ์๋ํ์ง ์๊ฒ ๋ค์ case(๋๋ default)์ ํด๋นํ๋ ์ฝ๋๊น์ง ์ํ๋์ด ๋ฒ๋ฆฌ๋ฏ๋ก
์ฃผ์ํด์ผ ํจ.
34. SWITCH ๊ตฌ๋ฌธ
โข switch (menuItem) {
case kOpenMenuItem:
// ํ์ผ ์ด๊ธฐ ์ฝ๋
break;
case kSaveMenuItem:
// ํ์ผ ์ ์ฅ ์ฝ๋
break;
default:
// ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ ์ฝ๋
break;
}
35. ์ผํญ ์ฐ์ฐ์
โข C++์ ์ ์ผํ ์ผํญ ์ฐ์ฐ์
โข
โ๋ง์ฝ ~์ด๋ฉด ~ํ๊ณ ์๋๋ฉด ~ํ๋คโ๋ฅผ ์ถ์ฝ์ ์ผ๋ก ํํํ๋ ๋ฌธ๋ฒ์ผ๋ก ?๊ณผ :๋ก ์ด๋ฃจ์ด์ง.
โข
std::cout << ((i > 2) ? โyesโ : โnoโ);
โข
i๊ฐ 2๋ณด๋ค ํฌ๋ฉด yes๋ฅผ ์ถ๋ ฅํ๊ณ ์๋๋ฉด no๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋.
36. ์กฐ๊ฑด ์ฐ์ฐ์
โข ์ผ๋ฐ์ ์ธ ์กฐ๊ฑด ์ฐ์ฐ์์ ๋ํ ์ค๋ช
.
โข
<, <=, >, >= : ์ผ์ชฝ ๊ฐ์ ์ค๋ฅธ์ชฝ ๊ฐ๊ณผ ๋น๊ตํ์ฌ, ์๊ฑฐ๋, ์๊ฑฐ๋ / ๊ฐ๊ฑฐ๋, ํฌ๊ฑฐ๋, ํฌ๊ฑฐ๋ / ๊ฐ๊ฑฐ๋์ ๋ฐ๋ผ ์ฐธ,
๊ฑฐ์ง์ ๋ฆฌํดํจ. โ if (i < 0) { std::cout << โi๋ ์์์ด๋ค.โ; }
โข
== : ์ผ์ชฝ / ์ค๋ฅธ์ชฝ ๊ฐ์ด ๊ฐ์ผ๋ฉด ์ฐธ. ๋์
์ฐ์ฐ์ =๊ณผ ํผ๋ํ์ง ์๋๋ก ์ฃผ์. โ if (i == 3) { std::cout << โi๋
3์ด๋ค.โ; }
โข
!= : ์ผ์ชฝ / ์ค๋ฅธ์ชฝ ๊ฐ์ด ๋ค๋ฅด๋ฉด ์ฐธ. โ if (i != 3) { std::cout << โi๋ 3์ด ์๋๋ค.โ; }
โข
! : ๋จํญ ์ฐ์ฐ์๋ก, ๋
ผ๋ฆฌ ๊ธฐํธ NOT๊ณผ ๊ฐ์. ์ฐธ / ๊ฑฐ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ํด. โ if (!someBoolean) { std::cout
<< โsomeBoolean์ ๊ฑฐ์ง์ด๋ค.โ; }
โข
&& : ๋
ผ๋ฆฌ ๊ธฐํธ AND์ ๊ฐ์. ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋ณ์ ๋๋ ํํ์์ ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ์ฐธ์ด๋ฉด ์ฐธ์ ๋ฆฌํด. โ if
(someBoolean && someOtherBoolean) { std::cout << โ์์ชฝ ๋ค ์ฐธ์ด๋ค.โ; }
โข
|| : ๋
ผ๋ฆฌ ๊ธฐํธ OR๊ณผ ๊ฐ์. ์ผ์ชฝ / ์ค๋ฅธ์ชฝ ์ด๋ ์ชฝ์ด๋ ์ฐธ์ด๋ฉด ์ฐธ์ ๋ฆฌํด. โ if (someBoolean ||
someOtherBoolean) { std::cout << โ์ต์ํ ๋ ์ค ํ๋๋ ์ฐธ์ด๋ค.โ; }
37. ์กฐ๊ฑด ์ฐ์ฐ์
โข C++๋ ํํ์์ ์คํํ ๋ ๋จ๋ฝ ๋
ผ๋ฆฌ(Short-Circuit Logic)๋ฅผ ์ ์ฉ.
โข
์กฐ๊ฑด๋ฌธ์ ์ต์ข
๊ฒฐ๊ณผ๊ฐ ๋จ์์๋ ํํ์์ ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด ํ์ ๋ ์ ์๋ค๋ฉด ํํ์๋ค์ ์คํํ์ง ์์.
โข
์๋ฅผ ๋ค์ด ์ฌ๋ฌ ํํ์ ํญ๋ชฉ์ ๋ํด OR ์ฐ์ฐ์ ํ ๋ ๊ฐ ํํ์์ ํญ๋ชฉ์ ์คํํ๋ ์ค์ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ธ ๊ฒ์ ๋ง๋๋ฉด
๊ทธ ์ดํ์ ํญ๋ชฉ์ ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด ์ ์ฒด ์กฐ๊ฑด ๊ตฌ๋ฌธ์ ๊ฐ์ด ์ฐธ์ด ๋๋ฏ๋ก ์ดํ ํญ๋ชฉ์ ์คํํด๋ณด์ง ์์.
โข
bool result = bool1 || bool2 || (i > 7) || (27 / 13 % i + 1) < 2;
โข
bool1์ด ์ฐธ์ผ๋ก ํ๋ช
๋์๋ค๋ฉด ์ ์ฒด ๊ฒฐ๊ณผ๋ ๋ฌด์กฐ๊ฑด ์ฐธ์ด ๋๋ฏ๋ก ๋๋จธ์ง ๋ถ๋ถ์ ๊ณ์ฐ์ ์๋ต.
โข
๋ถํ์ํ ์์
์ด ์คํ๋์ง ์๋๋ก ์ธ์ด ์ฐจ์์์ ์ต์ ํ๋จ.
โข
ํ์ง๋ง ํน์ ํํ์์ด ํจ์ ํธ์ถ์ ํฌํจํ๋ ๋ฑ, ํ์ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น๋ ์ํ ๋ณํ๋ฅผ ์ผ๊ธฐํ๋ค๋ฉด ์กฐ๊ฑด์์ ์๋ํ๋
์คํ ์๋ต์ด ์ฐพ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๋ฅผ ๋ง๋ค์ด ๋ผ ์๋ ์์.
38. WHILE ๋ฃจํ
โข while ๋ฃจํ๋ ์ฃผ์ด์ง ํํ์์ด ์ฐธ์ธ ๋์ while ๋ธ๋ก์ ์ฝ๋๊ฐ ์คํ๋๊ฒ ํจ.
โข
int i = 0;
while (i < 5) {
std::cout << โ์ด๊ฑด ์ฌ์ด๋ฐโ << std::endl;
i++;
}
โข break ํค์๋๋ฅผ ์ด์ฉํ๋ฉด ๋ฃจํ์์ ๋ฐ๋ก ๋ฒ์ด๋ while ๋ธ๋ก ์ดํ์ ์ฝ๋๋ก ์ฐ์ํด์ ์คํํ๊ฒ ํจ.
โข continue ํค์๋๋ ๋ฃจํ ๋ธ๋ก ๋ด์์ ํด๋น ํค์๋ ์๋์ชฝ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ฐ๋ก ๋ฃจํ์ ์ฒ์์ผ๋ก
๋์๊ฐ์ ๋ค์ ์คํํ๊ฒ ํจ.
39. DO/WHILE ๋ฃจํ
โข do / while ๋ฃจํ๋ while ๋ฃจํ์ ํ์ํ์ผ๋ก while ๋ฃจํ์ ๋น์ทํจ.
โข
๋จ, while ๋ธ๋ก์ ์ฝ๋๊ฐ ์ฒ์ ํ ๋ฒ์ ๋ฌด์กฐ๊ฑด ์คํ๋๊ณ ๋์ ๋ฃจํ ๋ฐ๋ณต ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ค๋ ์ ์ด ๋ค๋ฆ.
โข
์ฒซ ๋ฒ์งธ ์คํ์ด ๋ฌด์กฐ๊ฑด ๋ฐ์ํด์ผ ํ๋ ์ํฉ์์ ์ฒซ ๋ฒ์งธ ๋น๊ต๋ฌธ์ ๋ถํ์ํ ์คํ์ ์ ๊ฑฐํด์ฃผ๋ ํจ๊ณผ.
โข
int i = 100;
do {
std::cout << โ์ด๊ฑด ์ฌ์ด๋ฐโ << std::endl;
i++;
} while (i < 5);
40. FOR ๋ฃจํ
โข for ๋ฃจํ์ while ๋ฃจํ๋ ์ํธ ๋ณํ์ด ๊ฐ๋ฅ.
โข for ๋ฃจํ๋ ์์ ์กฐ๊ฑด, ์ค๋จ ์กฐ๊ฑด ๊ทธ๋ฆฌ๊ณ ๋ฃจํ ๋ง์ง๋ง์ ๋ฐ๋ณต ์ํํ ์ฝ๋๋ฅผ ์ง์ ํ ์ ์์.
โข
for (int i = 0; i < 5; i++) {
std::cout << โ์ด๊ฑด ์ฌ์ด๋ฐโ << std::endl;
}
โข while ๋ฃจํ์ ํ๋ ์ผ์ ๊ฐ์ง๋ง ์์ ์กฐ๊ฑด, ์ค๋จ ์กฐ๊ฑด, ๋ฃจํ ๋ฐ๋ณต ์ฝ๋๊ฐ ํ ์ค์ ์ผ๋ชฉ์์ฐํ๊ฒ
ํ์๋๋ฏ๋ก ์ด๋ค ๊ฐ๋ฐ์์๊ฒ๋ ๊ฐ๋
์ฑ์ด ํจ์ฌ ๋ ์ข์ ์ ์์.
41. [C++ 11] ๊ตฌ๊ฐ ์ง์ ๋ฃจํ
โข ๊ตฌ๊ฐ ์ง์ for ๋ฃจํ๋ C++ 11์์ ์๋ก ๋์
๋ ๋ฐ๋ณต๋ฌธ.
โข ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ ์์
ํ ๋ ํธ๋ฆฌํจ.
โข ๋ฐฐ์ด๊ณผ ์ด๊ธฐํ ๋ฆฌ์คํธ, ๋ฐ๋ณต์๋ฅผ ๋ฆฌํดํ๋ begin() / end() ํจ์๋ฅผ ๋ฉค๋ฒ๋ก ๊ฐ์ง ๋ฐ์ดํฐ ํ์
์ด ์ฃผ ๋์.
โข int arr[] = {1, 2, 3, 4};
for (auto& i : arr) {
i += 2;
}
42. ๋ฐฐ์ด
โข ๋ฐฐ์ด์ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ ๊ฐ๋ค์ ์ผ๋ ฌ๋ก ๋์ดํ ๊ฒ.
โข C++์์ ๋ฐฐ์ด์ ์ ์ธํ ๋๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ช
์์ ์ผ๋ก ์ค์ ํด์ผ ํจ.
โข ๋ณ์๋ฅผ ์ด์ฉํ๋๋ผ๋ const ๋ณ์์ฌ์ผ ํจ.
โข C++ 11์์๋ ์ด๋ฌํ ์กฐ๊ฑด์ ์ฝ๊ฐ ์ํํ์ฌ ์์ ํํ์(constexpr)์ ๋ฐฐ์ด ํฌ๊ธฐ ์ ์ธ์ ์ด์ฉํ ์ ์์.
โข int myArray[10];
for (int i = 0; i < 10; i++) { myArray[i] = 0; }
โข int myArray[10] = {0};
โข C++ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ธ์ ๋ 0๋ฒ์งธ์ ์์น.
โข ๋ง์ง๋ง ํญ๋ชฉ์ ์์น๋ ๋ฐฐ์ด ํฌ๊ธฐ์ โ 1์์ ์ฃผ์ํด์ผ ํจ.
43. [C++ 11] STD::ARRAY
โข C++ 11์์๋ std::array๋ผ๋ ์๋ก์ด ํํ์ ์ปจํ
์ด๋๋ฅผ ๋์
.
โข <array> ํค๋์ ์ ์๋์ด ์์.
โข std::array๋ C์ธ์ด ๋ฐฐ์ด์ ๋์ฒดํ๋ ์์ ํ(๋ฒ์๋ฅผ ๋ฒ์ด๋ ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ์์
์ ์ํ์ด ์๋) ๋ฐฐ์ด ํ์
.
โข std::array๋ std::vector์ ๋ฌ๋ฆฌ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ด ์๋ก ํญ๋ชฉ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ง๋ง
์ค๋ฒํค๋๊ฐ ์ ์ ์ฅ์ .
โข ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ํญ์ ์ ํํ๊ฒ ์ ์ ์๊ณ , ํฌ์ธํฐ๊ฐ ์๋์ผ๋ก ์๋ชป ํ์
์บ์คํ
๋๋ ๊ฒ๋ ํผํ ์ ์์ผ๋ฉฐ
C++ STL์ ๋ฐ๋ณต์๋ฅผ ํ์ฉํ์ฌ ํญ๋ชฉ์ ์ํํ๊ฑฐ๋ STL ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ์๋ ์์.
44. [C++ 11] STD::ARRAY
โข #include <iostream>
#include <array>
using namespace std;
int main()
{
array<int, 3> arr = {9, 8, 7};
cout << โArray size = โ << arr.size() << endl;
for (auto i : arr) { cout << i << endl; }
return 0;
}
45. ํจ์
โข ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด main() ํจ์์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ด์ ์ ์์.
โข
ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด ์ดํดํ๊ธฐ ์ฌ์ด ์๋ฏธ ๋จ์๋ก ์ชผ๊ฐ์ด ํจ์๋ค๋ก ์ ๋ฆฌํด์ผ ํจ.
โข ๋ค๋ฅธ ์ฝ๋์์ ํจ์๋ฅผ ์ด์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํด์๋ ํจ์๋ฅผ ์ ์ธํด์ผ ํจ.
โข
ํจ์๊ฐ ํน์ ์์ค ํ์ผ ์์์๋ง ์ด์ฉ๋๋ค๋ฉด ๋ณดํต ๊ทธ ํ์ผ ์์์ ์ ์ธ๊ณผ ์ ์๋ฅผ ๋ชจ๋ ํ๊ฒ ๋จ.
โข
๋ค๋ฅธ ๋ชจ๋์ ์์ค ํ์ผ์์ ์ด์ฉ๋๋ค๋ฉด ํจ์ ์ ์ธ์ ํค๋ ํ์ผ์ ์์น์ํค๊ณ ํจ์ ์ ์๋ ์์ค ํ์ผ์ ๋๊ฒ ๋จ.
โข ํจ์ ์ ์ธ์ ์ : void myFunction(int i, char c);
โข
๋ฆฌํด ํ์
์ด void์ด๋ฏ๋ก ํธ์ถ์์๊ฒ ์๋ฌด๋ฐ ๊ฒฐ๊ณผ๋ ๋๋ ค์ฃผ์ง ์์.
โข
ํจ์ ํ๋ผ๋ฏธํฐ๋ก int์ char๊ฐ ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ ํจ์๋ฅผ ํธ์ถํ ๋๋ ๋ ๊ฐ์ ๊ผญ ์
๋ ฅํด์ผ ํจ.
46. ํจ์
โข ํจ์ ์ ์ธ๋ถ์ ํจ์ ์ ์๋ถ๊ฐ ๊ฐ์ง ์์ผ๋ฉด ํด๋น ํจ์๋ฅผ ์ฐพ์ง ๋ชปํ์ฌ ์ปดํ์ผ๋ฌ์ ๋งํฌ ๋จ๊ณ์์ ์๋ฌ ๋ฐ์.
โข void myFunction(int i, char c)
{
std::cout << โthe value of i is โ << i << std::endl;
std::cout << โthe value of c is โ << c << std::endl;
}
โข ์ ํจ์๋ฅผ ํธ์ถํ ๋๋ int์ char ํ์
์ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์
๋ ฅํจ.
โข
myFunction(8, โaโ);
โข
myFunction(someInt, โbโ);
โข
myFunction(5, someChar);
47. ํจ์
โข ํธ์ถ์์๊ฒ ๋ฆฌํด๊ฐ์ ๋๊ฒจ ์ค ๋๋ ๋ฆฌํดํ ๋ฐ์ดํฐ ํ์
์ ์ ์ธํด ์ฃผ์ด์ผ ํจ.
โข
int addNumbers(int number1, int number2);
int addNumbers(int number1, int number2)
{
int result = number1 + number2;
return result;
}
โข C++ 11์์๋ ์๋์ผ๋ก ํจ์ ์ด๋ฆ์ ๋ด๊ณ ์๋ __func__ ๋ณ์๊ฐ ํจ์์ ๋ก์ปฌ ๋ณ์๋ก์จ ์ ์๋จ.
โข
static const char __func__[] = โfunction-nameโ;
โข
std::cout << โEntering Function โ << __func__ << std::endl;
48. ์คํ๊ณผ ํ
โข C++ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์คํ(Stack)๊ณผ ํ(Heap) ๋ ๊ฐ์ง๋ก ๋๋์ด์ง.
โข
๋ง์ฝ ํ์ฌ ์คํ ์ค์ธ ํจ์ foo()๊ฐ ๋ ๋ค๋ฅธ ํจ์ bar()๋ฅผ ํธ์ถํ๋ค๋ฉด ์๋ก์ด ์คํ ํ๋ ์์ด ์์ฑ๋๊ณ bar()
ํจ์๋ฅผ ํธ์ถํ ๋ ๋๊ฒจ์ง ํ๋ผ๋ฏธํฐ๋ค์ด foo()์ ์คํ ํ๋ ์์์ ๋ณต์ ๋์ด ์๋ก ์์ฑ๋ bar()์ ์คํ ํ๋ ์์
์ฎ๊ฒจ์ง.
โข
์คํ ํ๋ ์์ ๊ฐ ํจ์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฒฉ๋ฆฌ์ํค๋ ์ค์ํ ์ญํ ์ ํจ.
โข
โข
โข
์๋ฅผ ๋ค์ด foo() ํจ์์ ๋ก์ปฌ ๋ณ์๋ค์ bar() ํจ์๊ฐ ํธ์ถ๋๋ ๋์ ๋ฐ๋์ง ์์(๋จ, ๋ช
์์ ์ผ๋ก bar() ํจ์์ ํด๋น ๋ณ์์
๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒฝ์ฐ๋ ์์ธ).
๊ทธ๋ฆฌ๊ณ bar() ํจ์์ ์คํ์ด ๋๋๊ณ ํจ์๊ฐ ๋ฆฌํดํ๋ฉด bar() ํจ์์ ๋ก์ปฌ ๋ณ์๋ค์ bar()์ ์คํ ํ๋ ์๊ณผ ํจ๊ป ์ฌ๋ผ์ง๊ธฐ
๋๋ฌธ์ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ์ง ์์.
ํ ๋ฉ๋ชจ๋ฆฌ๋ ํ์ฌ ์คํ ์ค์ธ ํจ์๋ ์คํ ํ๋ ์๊ณผ๋ ์์ ํ ๋
๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ.
โข
ํจ์์ ํธ์ถ๊ณผ ๋ฆฌํด์ ๊ด๊ณ์์ด ํญ์ ์กด์ฌํด์ผ ํ๋ ๋ณ์๋ผ๋ฉด ํ์ ์์น์ํค๋ฉด ๋จ.
49. ๋์ ํ ๋น ๋ฐฐ์ด
โข ์คํ์ ๋์ ๋ฐฉ์ ๋๋ฌธ์ ์ปดํ์ผ ์์ ์ ๊ฐ ์คํ ํ๋ ์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋์ด์ผ ํจ.
โข
์คํ ํ๋ ์์ ํฌ๊ธฐ๊ฐ ์ฌ์ ์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ํจ์์ ๋ก์ปฌ ๋ณ์๋ก ์ ์ธํ ์ ์์.
โข
int arraySize = 8;
int myVariableSizedArray[arraySize]; // ์ปดํ์ผ ์๋ฌ ๋ฐ์
โข
๋ก์ปฌ ๋ณ์๋ ๋ชจ๋ ์คํ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ ํํ ํฌ๊ธฐ๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์ ์ ์์ด์ผ ํจ.
โข
๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์คํ ์์ ์ ๋์ ์ผ๋ก ๊ฒฐ์ ํด์ผ ํ๋ค๋ฉด ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํด ์คํ ๋์ ํ์ ๋ฐฐ์ด์ ์์น์ํด.
50. ๋์ ํ ๋น ๋ฐฐ์ด
โข ๋์ ๋ฐฐ์ด์ ํ ๋นํ ๋๋ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธ.
โข
int* myVariableSizedArray;
โข
int ํค์๋ ๋ค์ ๋ถ์ * ํ์๋ ํด๋น ๋ณ์๊ฐ int ํ์
๋ฐ์ดํฐ์ ๋ํ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์์ ๋ํ๋.
โข
ํฌ์ธํฐ๋ ํ ๋น๋ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํ์ดํ๋ก ์ดํดํ ์ ์์.
โข
ํฌ์ธํฐ๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด new ๋ช
๋ น์ ์ด์ฉํจ.
โข myVariableSizedArray = new int[arraySize];
โข
new ๋ช
๋ น์ ํ๋ผ๋ฏธํฐ arraySize๋งํผ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ์ฌ ๊ทธ ์ฃผ์ ๊ฐ์ ํฌ์ธํฐ ๋ณ์์ ๋์
ํด์ค.
โข
๋์ ์ผ๋ก ํ ๋น๋ ๋ฐฐ์ด์ ๋๋ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋ช
์์ ์ผ๋ก ํ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํด์ผ ํจ.
โข delete [] myVariableSizedArray;
51. ๋์ ํ ๋น ๋ฐฐ์ด
โข C++์ new์ delete ๋ช
๋ น์ C์์์ malloc(), free()์ ์ ์ฌ.
โข new, new []์ delete, delete []๋ ๊ฐ๊ฐ ์ง์ ๋ง์ถฐ์ ์ฌ์ฉํด์ผ ํจ.
โข
new []๋ฅผ ํ๋ค๋ฉด ๋ฐ๋์ delete []๋ฅผ ์ํํด์ผ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ(Memory Leak)์ ๋ง์ ์ ์์.
โข ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ํผํ๊ณ ์ถ๋ค๋ฉด ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉ.
โข
์ค๋งํธ ํฌ์ธํฐ๋ ํด๋น ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ์ค์ฝํ๊ฐ ๋ฒ์ด๋๋ฉด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ์ํ๋จ.
โข
<memory> ํค๋์ ์ ์๋ C++ 11์ unique_ptr์ ์ฌ์ฉ.
โข
unique_ptr<int[]> myVariableSizedArray(new int[arraySize]);
โข
unique_ptr๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ฝํ์์ ๋ฒ์ด๋ ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์ํ.
52. ํฌ์ธํฐ์ ์ด์ฉ
โข ์ด๋ ํ ๋ณ์๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ ์ ์์.
โข
int* myIntegerPointer = new int;
โข
์ฌ๊ธฐ์ ํฌ์ธํฐ๋ ์ ์ ๋ณ์ ๋จ ํ๋๊ฐ ์์นํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด.
โข
๋ณ์ซ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ํฌ์ธํฐ๋ฅผ ์ญ์ฐธ์กฐ(Dereference)ํด์ผ ํจ.
โข *myIntegerPointer = 8;
โข ํฌ์ธํฐ ์์ฒด๋ ๋ฐ๋์ง ์๊ณ ๊ทธ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ด ๋ฐ๋๋ ๊ฒ.
โข ํฌ์ธํฐ๊ฐ ํญ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ง ๊ฐ๋ฆฌํค๋ ๊ฒ์ ์๋.
โข
์คํ์ ๊ฐ๋ฆฌํฌ ์๋ ์๊ณ ์ฌ์ง์ด ๋ ๋ค๋ฅธ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํฌ ์๋ ์์.
โข
๋ณ์๋ก๋ถํฐ ํฌ์ธํฐ๋ฅผ ์ป์ ๋๋ ์ฃผ์ ์ฐธ์กฐ ์ฐ์ฐ์ &๋ฅผ ์ด์ฉ.
โข
int i = 9;
int* myIntegerPointer = &i; // ์ซ์ 8์ ๊ฐ์ผ๋ก ๊ฐ์ง ๋ณ์์ ํฌ์ธํฐ ๋ณ์
53. ํฌ์ธํฐ์ ์ด์ฉ
โข ํฌ์ธํฐ๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋๋ ํน๋ณํ ๋ฌธ๋ฒ์ ์ฌ์ฉ.
โข
๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ ์ญ์ฐธ์กฐ ์ฐ์ฐ์ *๋ฅผ ํฌ์ธํฐ์ ๋ถ์ด๊ณ , ์ด๋ ๊ฒ ์ญ์ฐธ์กฐ๋ ๋ณ์์ .์ ๋ถ์ฌ์ ๊ตฌ์กฐ์ฒด ๋ด ๊ฐ
ํ๋๋ฅผ ์ ํ.
โข
โข
EmployeeT* anEmployee = getEmployee();
cout << (*anEmployee).salary << endl;
๊ตฌ์กฐ์ฒด ์ญ์ฐธ์กฐ ์ฐ์ฐ์ ->๋ฅผ ์ด์ฉํ๋ฉด ์ญ์ฐธ์กฐ์ ํ๋ ์ ๊ทผ์ ํ ๋ฒ์ ํ ์ ์์.
โข
EmployeeT* anEmployee = getEmployee();
cout << anEmployee->salary << endl;
54. ํฌ์ธํฐ์ ์ด์ฉ
โข ๊ฐ์ ์ํ ์ ๋ฌ(Passing by Value) : ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ํ๋ผ๋ฏธํฐ ์ ๋ฌ์ ์ํด ๋ณ์๋ฅผ ์ธ์๋ก ์ด์ฉํ ๋
ํด๋น ๋ณ์์ ์ฃผ์๊ฐ ์๋ ๊ฐ์ ๋๊ธฐ๊ฒ ๋จ.
โข
์๋ฅผ ๋ค์ด ์ด๋ค ํจ์๊ฐ ์ ์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๊ณ , ํจ์ ํธ์ถ ์ ์ ์ ๋ณ์๋ฅผ ์ธ์๋ก ๋๊ฒผ๋ค๋ฉด ํด๋น ๋ณ์์ ๊ฐ์
๋ณต์ฌํ์ฌ ํจ์ ์คํ ํ๋ ์ ์์ ํ๋ผ๋ฏธํฐ ์์ญ์ ์์น์ํด.
โข ์ฐธ์กฐ์ ์ํ ์ ๋ฌ(Passing by Reference) : ํฌ์ธํฐ๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด ์คํ ํ๋ ์ ์์ ๋ณต์ฌ๋์ด
์ ์ฅ๋๋ ๊ฒ์ด ๋ณ์์ ๊ฐ์ด ์๋ ๋ณ์์ ์ฃผ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ์ฃผ์๋ฅผ ์ญ์ฐธ์กฐ ํจ์ผ๋ก์ ์คํ ํ๋ ์ ๋ฐ์
์๋ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ฐ๋ฅ.
โข
C++์์๋ ์ฐธ์กฐํ ๋ณ์๋ผ๋ ๋ ์ข์ ๋ฐฉ์์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ๋ฅผ ํตํ ์ฐํ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์์๋ ๋จ.
55. C ์ธ์ด์ ๋ฌธ์์ด
โข C++์์ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ.
โข
1. ๊ธฐ์กด C ์ธ์ด์์์ ๊ฐ์ด ๋ฌธ์(char)์ ๋ฐฐ์ด๋ก ์ด์ฉํ๋ ๊ฒ.
โข
2. C++์์ ์ ๊ณตํ๋ string ํ์
์ ์ด์ฉํ๋ ๊ฒ.
โข โHello, Worldโ์ ๊ฐ์ ๋ฌธ์์ด์ ๋ด๋ถ์ ์ผ๋ก ๋ ๋ฌธ์(Null Character) โ0โ์ด ๋ง์ง๋ง์ ์ถ๊ฐ๋
๋ฌธ์(char) ํ์
์ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋จ.
โข
char arrayString[20] = โHello, Worldโ;
const char* pointerString = โHello, Worldโ;
56. C++ ์ธ์ด์ ๋ฌธ์์ด
โข C++์์๋ string ํ์
์ ์ง์ํ์ฌ ํจ์ฌ ๋ ์ ์ฐํ๊ฒ ๋ฌธ์์ด์ ์ด์ฉํ ์ ์์.
โข
<string> ํค๋์ ์ ์๋์ด ์๊ณ ๊ธฐ๋ณธ ํ์
์ผ๋ก์จ ์ด์ฉ๋๋ฉฐ std ๋ค์์คํ์ด์ค ์๋์ ์ ์๋์ด ์์.
โข
string myString = โHello, Worldโ;
cout << โThe value of myString is โ << myString << endl;
โข C++ string ํ์
์ ์ด์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ์ฐ์ฐ์๋ก ๋ฌธ์์ด์ ์กฐ์ํ ์ ์์.
โข
์๋ฅผ ๋ค์ด ๋ฌธ์์ด์ ํฉ์น ๋ C์์๋ strcat() ํจ์๋ฅผ ์ด์ฉํ์ง๋ง, string ํ์
๋ฌธ์์ด์ + ์ฐ์ฐ์๋ฅผ ์ด์ฉ.
โข
๊ทธ๋ฆฌ๊ณ C์์๋ ๋ฌธ์์ด ๋น๊ต์ ==๋ฅผ ์ด์ฉํ๋ฉด ๋ฌธ์์ด ์์ฒด๊ฐ ์๋ ์ฃผ์ ๊ฐ์ ๋น๊ตํ๊ฒ ๋์ด ์๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์
์ ์์ง๋ง string ํ์
๋ฌธ์๋ == ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด ๋น๊ต๋ฅผ ํ ์ ์์.
57. C++ ์ธ์ด์ ๋ฌธ์์ด
โข string str1 = โHelloโ;
string str2 = โWorldโ;
string str3 = str1 + โ โ + str2;
cout << โstr1 is โ << str1 << endl;
cout << โstr2 is โ << str2 << endl;
cout << โstr3 is โ << str3 << endl;
if (str3 == โHello Worldโ) { cout << โstr3 is what it should be.โ << endl; }
else { cout << โHmmm . . . str3 isnโt what it should be.โ << endl; }
58. ์ฐธ์กฐํ
โข ํจ์์ ์ ํ์ ์ธ ํจํด์ 0๊ฐ๋ 1๊ฐ ์ด์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ๊ณ์ฐํ๊ณ ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฆฌํดํ๋ ๊ฒ.
โข ํ์ง๋ง ๋ฆฌํดํ๊ณ ์ถ์ ๊ฒฐ๊ณผ ๊ฐ์ด 2๊ฐ ์ด์์ผ ์๋ ์๊ณ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ง ๋ณ์๋ฅผ ํจ์์์ ๋ณ๊ฒฝํด์ฃผ๊ธธ
์ํ ์๋ ์์.
โข ์ด๋ฐ ๊ฒฝ์ฐ C์์๋ ๋ณ์ ๋์ ๋ณ์์ ํฌ์ธํฐ๋ฅผ ์ ๋ฌํ์ฌ ํด๊ฒฐ.
โข C++์์๋ ํฌ์ธํฐ ์์ด๋ ๋ช
์์ ์ผ๋ก ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ ์ง์.
โข
ํจ์ ํ๋ผ๋ฏธํฐ์ ์ ์๋ถ์์ ๊ฐ ํ๋ผ๋ฏธํฐ์ ๋ณ์ ์ด๋ฆ ์์ & ์ฐ์ฐ์๋ฅผ ๋ถ์ด๋ ๊ฒ.
โข
์ฌ์ฉ๋ฒ์ ๋ณดํต ๋ณ์์ ๊ฐ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก๋ ํจ์ ์์์๋ ํจ์ ํธ์ถ ์ ์ฌ์ฉ๋ ๋ณ์์ ํฌ์ธํฐ๊ฐ ์ฌ์ฉ๋จ.
59. ์ฐธ์กฐํ
โข void addOne(int i) { i++; } // ํ๋ผ๋ฏธํฐ ๋ณ์์ ๋ณต์ ๋ณธ์ด๊ธฐ ๋๋ฌธ์ ์๋ ๋ณ์์๋ ์๋ฌด๋ฐ ์ํฅ์ด ์์
void addOne(int& i) { i++; } // ์๋ณธ ํ๋ผ๋ฏธํฐ ๋ณ์์ ๊ฐ์ด 1 ์ฆ๊ฐํจ
โข ์์ ํจ์๋ฅผ ํธ์ถํ ๋๋ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ค๋ฉด ๋ณดํต ํ๋ผ๋ฏธํฐ ํจ์๋ ์ฐธ์กฐํ ํ๋ผ๋ฏธํฐ ํจ์๋
์ฐจ์ด๊ฐ ์์.
โข
int myInt = 7;
addOne(myInt);
โข ํ๋ผ๋ฏธํฐ๊ฐ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ ํจ์๋ ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ ์ฃผ์ด๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ฐธ์กฐํ ๋ณ์๋ฅผ
๋ฐ๋ ํจ์๋ ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธธ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์.
โข
์ด๋ฌํ ๋ฌธ์ ๋ rvalue ์ฐธ์กฐ๋ก ํด๊ฒฐํ ์ ์์.
60. ์์ธ ์ฒ๋ฆฌ
โข C++์ ์ ์ฐํ ์ธ์ด์ด๊ธฐ๋ ํ์ง๋ง ๋ฑํ ์์ ํ ์ธ์ด๋ ์๋.
โข
์์ฑํ ์ฝ๋๊ฐ ์๋ฑํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํค์ง๊ฑฐ๋ 0์ผ๋ก ๋๋๊ธฐ๋ฅผ ์๋ํด์ ์ปดํ์ผ๋ฌ๊ฐ ๊ฑธ๋ฌ์ฃผ์ง ์์.
โข
C++์ exception์ ์ฝ๋์ ์์ ์ฑ์ ํ ๋จ๊ณ ๋์ด๊ธฐ ์ํด ์ธ์ด ์ฐจ์์์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ.
โข exception์์๋ ๋ช ๊ฐ์ง ์๋ก์ด ์ฉ์ด๊ฐ ๋์
๋จ.
โข
ํน์ ์ฝ๋๊ฐ ์์ธ์ ์ธ ์ํฉ์ ์ธ์งํ๋ฉด exception์ ๋์ง(throw).
โข
๊ทธ๋ฆฌ๊ณ ๋ ๋ค๋ฅธ ์ฝ๋๊ฐ ๋์ ธ์ง exception์ ๋ฐ์์(catch) ํ์ํ ๋ค์ฒ๋ฆฌ๋ฅผ ํจ.
61. ์์ธ ์ฒ๋ฆฌ
โข #include <stdexcept>
double divideNumbers(double inNumerator, double inDenomiator)
{
if (inDenominator == 0) {
throw std::exception();
}
return inNumerator / inDenomiator;
}
โข throw ๊ตฌ๋ฌธ์ ์ด๋ฅด๋ฉด ๋ฆฌํด๊ฐ๋ ์์ด ํจ์์ ์คํ์ด ์ฆ์ ์ค๋จ๋จ.
โข ํธ์ถํ ์ธก์์ ์ด ํจ์๋ฅผ try / catch ๋ธ๋ก์ผ๋ก ๊ฐ์๋ค๋ฉด ๋์ ธ์ง exception์ ๋ฐ์์ ๋ค์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋จ.
62. ์์ธ ์ฒ๋ฆฌ
โข #include <iostream>
#include <stdexcept>
int main()
{
try {
std::cout << divideNumbers(2.5, 0.5) << std::endl;
std::cout << divideNumbers(2.3, 0) << std::endl;
} catch (const std::exception& exception) {
std::cout << โAn exception was caught!โ << std::endl;
}
return 0;
}
63. CONST ์์
โข C์์๋ ๋ฒ์ ๋๋ฒ ๊ฐ์ด ์คํ๋๋ ๋์ ์ ๋ ๋ณํ์ง ์๋ ์์ซ๊ฐ์ ์ด๋ฆ์ ๋ถ์ฌํ์ฌ ํ์ฉํ ๋ #define
์ ์ฒ๋ฆฌ ๋งคํฌ๋ก๋ฅผ ์ด์ฉํ์.
โข C++์์๋ #define ๋์ const ํค์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๊ถ์ฅ.
โข const๋ก ์ ์ธ๋ ๋ณ์๋ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณ์ซ๊ฐ์ด ๋ฐ๋์ง ์๋๋ก ๋ณด์ฆ๋จ.
โข
const float kVersionNumber = 2.0f;
const string kProductName = โSuper Hyper Net Modularโ;
64. ํ๋ผ๋ฏธํฐ ๋ณดํธ๋ฅผ ์ํ CONST
โข C++์์๋ const๊ฐ ์๋ ๋ณ์๋ฅผ const ๋ณ์๋ก ์บ์คํ
ํ ์ ์์.
โข
ํน์ ์ฝ๋๊ฐ ์คํ๋๋ ๋์ ํน์ ๋ณ์๋ฅผ ์์ํํ๋ฉด ์๋ํ์ง ์๊ฒ ๊ฐ์ด ๋ฐ๋๋ ์ค๋ฅ ์ํฉ์ ์ปดํ์ผ ์์ ์
์์๋ผ ์ ์์.
โข
์๋ฅผ ๋ค์ด ์ฌ๋ฌ๋ถ์ด ์์ฑํ ํจ์๋ฅผ ๋ค๋ฅธ ๋๋ฃ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ ๋ ํด๋น ํจ์๊ฐ ์ ๋ฌ๋ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ฌด๋จ์ผ๋ก ๋ณ๊ฒฝํ์ง
์๋๋ค๋ ๊ฒ์ ๋ณด์ฆํด์ผ ํ๋ค๋ฉด const ๋ณ์๊ฐ ํด๊ฒฐ์ฑ
์ด ๋จ.
65. ํ๋ผ๋ฏธํฐ ๋ณดํธ๋ฅผ ์ํ CONST
โข void mysteryFunction(const char* myString);
int main()
{
char* myString = new char[2];
myString[0] = โaโ; myString[1] = โ0โ;
mysteryFunction(myString);
return 0;
}
void mysteryFunction(const char* myString)
{
myString[0] = โbโ; // const ์๋ฐ์ผ๋ก ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํจ
}
โข mysteryFunction() ํจ์๋ฅผ ํธ์ถํ๋ฉด์ char* ๋ณ์๋ฅผ const char* ํ์
์ผ๋ก ์๋์ผ๋ก ์บ์คํ
.
66. ์ฐธ์กฐํ CONST
โข ์ฐธ์กฐํ ํ์
์ ํ๋ผ๋ฏธํฐ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํ๋ ค๊ณ ์ด์ฉํ๊ธฐ์ const์ ์ฌ์ฉ์ด ์ผ๊ฒฌ ๋ชจ์๋์ด ๋ณด์.
โข ์ฌ์ค ์ฐธ์กฐํ ํ๋ผ๋ฏธํฐ ๋ณ์๋ ๋ณ์ซ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ชฉ์ ์ธ์๋ ์ฑ๋ฅ ๊ด์ ์์ ๋ถํ์ํ ๊ฐ์ ๋ณต์ ๋ฅผ
ํผํ๋ ค๋ ์๋๋ก ์ด์ฉ๋๋ ๊ฒฝ์ฐ๋ ๋ง์.
โข const์ด๋ฉด์ ์ฐธ์กฐํ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํจ์ผ๋ก์จ ๊ฐ ๋ณต์ ์ค๋ฒํค๋๋ ํผํ๊ณ ์ฐธ์กฐํ์ ์ํ ์์์ธ ์๋ณธ์
๋ณ์กฐ๋ ๋ง๋, ์ด๋ป๊ฒ ๋ณด๋ฉด ์ผ๊ฑฐ์๋์ ํจ๊ณผ๋ฅผ ์ป์.
โข ์ฐธ์กฐํ const ๋ณ์๋ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ๋ ๋ ์ค์ํจ.
โข
๊ฐ์ฒด๋ ์ ์ ๊ธฐ๋ณธ ํ์
๋ณด๋ค ๋ฉ์น๋ ํฌ๊ณ ๋ณต์ ์์
์์ฒด๊ฐ ์๋ํ์ง ์๋ ๋ถ์์ฉ์ ๋ณ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ.
67. ํด๋์ค์ ์ ์ธ
โข ํด๋์ค(Class)๋ ๊ฐ์ฒด์ ํน์ฑ์ ์ ์.
โข
C++์์ class๋ ๋ณดํต ํค๋ ํ์ผ์์ ์ ์ธ๋๊ณ ์์ธ ์ ์๋ ๊ด๋ จ ์์ค ํ์ผ์์ ์์ฑ๋จ.
โข
ํด๋์ค ์ ์๋ ํด๋์ค ์ด๋ฆ์ ์ ์ธํ๋ ๊ฒ์ผ๋ก ์์.
โข
์ค๊ดํธ {โฆ} ์์์๋ ์์ฑ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฉค๋ฒ ๋ณ์(Data Member)๋ค๊ณผ ํด๋์ค์ ํ๋์ ์กฐ์ ํ ์ ์๋
๋ฉ์๋(Method)๋ค์ด ์ ์ธ๋จ.
โข
โข
ํด๋์ค๋ช
๊ณผ ๊ฐ์ ์ด๋ฆ์ด๋ฉด์ ๋ฆฌํด๊ฐ์ด ์๋ ๋ฉ์๋๋ ์์ฑ์(Constructor)๋ผ๊ณ ๋ถ๋ฆผ.
โข
โข
๊ฐ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ๋ฉ์๋๋ค์ public, protected, private ์ธ ๊ฐ์ง ์ ๊ทผ ๊ถํ์ ๋งคํ๋จ.
๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋จ.
๋ฌผ๊ฒฐ ํ์(~)๋ก ์์ํ๊ณ ํด๋์ค๋ช
๊ณผ ๊ฐ์ ๋ฉ์๋๋ ์๋ฉธ์(Destructor)๋ผ๊ณ ํจ.
โข
์๋ฉธ์๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋จ.
โข ์์ ๋ถ๋ณ์ ์์น์ด ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ผ๋ก ์ ํ๋๊ณ ์ ์ง๋๊ฒ ํ๋ ค๋ฉด ๋ฉค๋ฒ ๋ณ์์ ๋ณ๊ฒฝ์ด ์๋ ๋ฉ์๋๋
๋ช
์์ ์ผ๋ก const ํค์๋๋ก ์ ์ธํ๋ ๊ฒ์ด ์ข์.
โข
const ๋ฉ์๋๋ฅผ โinspectorโ๋ผ๊ณ ํ๊ณ ๋ฉค๋ฒ ๋ณ๊ฒฝ์ด ์๋ ๋ฉ์๋๋ โmutatorโ๋ผ๊ณ ํจ.
68. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โข C++์์๋ ์ ์ฉํ ํด๋์ค๋ฅผ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๊ณต.
โข
์ค๋ณตํด์ ๊ฐ์ ๊ธฐ๋ฅ์ ํด๋์ค๋ฅผ ๊ฐ๋ฐํ๋ ๋ถ๋ด์ ํผํ ์ ์์.
โข
์ค๋ ์๊ฐ ๋ง์ ์ฌ๋์ผ๋ก๋ถํฐ ๊ฒ์ฆ๋์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ์ ๊ฐ๋ฅ์ฑ๋ ์ ์.
โข
์ฑ๋ฅ ์ต์ ํ ๋ํ ์ถฉ๋ถํ ๋์ด ์์ด์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ๋ ๊ฒ๋ณด๋ค ๋ ๋ฐ์ด๋จ.