โน๏ธ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 4.6 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://www.handongbee.com/posts/Cpp%EC%A0%95%EB%A6%AC/ |
| Last Crawled | 2025-11-24 10:08:14 (4 months ago) |
| First Indexed | 2024-03-09 03:33:04 (2 years ago) |
| HTTP Status Code | 200 |
| Meta Title | ํ ํ์ด์ง์ Cpp ๋ชจ๋ ์ ๋ฆฌํ๊ธฐ | 86.5๐ก๏ธ |
| Meta Description | ํ ํ์ด์ง๋ก ๋๋ด๋ C++ ๋ฌธ๋ฒ |
| Meta Canonical | null |
| Boilerpipe Text | ํ ํ์ด์ง๋ก ๋๋ด๋ C++ ๋ฌธ๋ฒ C++ vs C C++์ ๊ฐ์ฒด์งํฅ์ ์ธ์ด์ธ Simula์ ๊ฐ๋
์ C์ธ์ด์ ์ถ๊ฐํ์ฌ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ์ธ์ด์ด๋ค. ์ ๋ค๋ฆญ, ๊ฐ์ฒด์งํฅ, ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค. ์ฝ๋ ์คํ ๋ฐฉ์ ์์ค์ฝ๋๊ฐ ์คํํ์ผ์ด ๋์ด์ผ, ์คํํ ์ ์๋ค. ์ ํ์ฒ๋ฆฌ๊ธฐ: โ#โ ๋ฌธ์๋ก ์์ํ๋ ์ ํ์ฒ๋ฆฌ ์ง์๋ฌธ(#define)์ ์ฒ๋ฆฌํ๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์์
ํ๊ธฐ ์ข๋๋ก ์์ค๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ์ญํ ์ ํ๋ค. ์ปดํ์ผ๋ฌ: ์์ค์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ค.( .o , .obj ) ๋ง์ปค: ์ค๋ธ์ ํธ ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ, ์๋์ฝ๋(OS์์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํจ)๋ฅผ ํฉ์ณ ํ๋์ ์คํ ํ์ผ์ ๋ง๋ ๋ค. ์ฐ๋ฆฌ๋ ๋ง์ปค์์ ๋ง๋ค์ด์ง ์คํํ์ผ์ ํตํด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ค. vscode์์ Code Runner๋ฅผ ํตํด Cpp ํ์ผ์ ์คํ์ํค๋ฉด ํฐ๋ฏธ๋์์ ์๋์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๊ฐ ์
๋ ฅ๋๋ค. 1
2
cd "/Users/kane/workspace/1. Project/Algorithm/๋ฐฑ์ค/9345/" && g ++ - std = c ++ 2 a - g code . cpp - o a . out && "/Users/kane/workspace/1. Project/Algorithm/๋ฐฑ์ค/9345/" / a . out ์ด๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถ์ํ๋ฉด, ๋๋ ํฐ๋ฆฌ๋ฅผ ์์
ํ๊ฒฝ์ผ๋ก ์ฎ๊ธฐ๊ณ g++ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์ฝ๋๋ฅผ ์ฝ์ด a.out ์คํํ์ผ์ ๋ง๋ ๋ค. ์ดํ ํด๋น ์คํํ์ผ์ ์คํ์ํจ๋ค. ํ์
๋ณํ ๋ง์ฝ, ์๋ก ๋ค๋ฅธ ํ์
์ผ๋ก ์ฐ์ฐ์ ์งํํ๋ฉด, ๊ฒฐ๊ณผ๋ฌผ์ ํ์
์ ๋ ๋ฒ์๊ฐ ํฐ ์ชฝ์ผ๋ก ๋ณํ๋๋ค. ์ฐ์ ์ฐ์ฐ ์์๋ ๋ฐ์ดํฐ์ ์์ค์ด ์ต์ํ๋๋ ๋ฐฉํฅ์ผ๋ก ๋ฌต์์ ํ์
๋ณํ์ด ์งํ๋ฉ๋๋ค. ๋ช
์์ ๋ณํ (๋ณํํ ํ์
) ๋ณํํ ๋ฐ์ดํฐ // C์ธ์ด์ C++ ๋ ๋ค ์ฌ์ฉ ๊ฐ๋ฅํจ. ๋ณํํ ํ์
(๋ณํํ ๋ฐ์ดํฐ) // C++์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํจ. static ์ ์ ๋ณ์๋ฅผ ์๋ฏธํ๊ณ , ์ด๋ ํจ์์ ํธ์ถ์ด ๋๋๋ ์ฌ๋ผ์ง๋ ์ง์ญ ๋ณ์์๋ ๋ค๋ฅด๊ฒ ์ง์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ง ํ๋ค. ๋จผ์ ๊ฐ๊น์ด ๋ธ๋ฝ๋จ์ ์ ์์ฑ๋ ์ง์ญ ๋ณ์์์๋ถํฐ ์ ์ ๋ฉ๋ฆฌ๋๊ฐ๋ค. ์ฆ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ์ธ๋ ์ง์ญ๋ณ์์ ์ ์ญ๋ณ์๊ฐ ์์ผ๋ฉด ์ง์ญ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. Auto C++11 ๋ฒ์ ์์ ์๊ฒจ๋ฌ๊ณ , ์ปดํ์ผ๋ฌ ๋จ๊ณ์์ ์๋์ผ๋ก ํ์
์ ํ ๋นํ๋ค. ์ํ์์๋ ํธํ์ง๋ง, ํ์
์ด ํท๊ฐ๋ฆด ๋๋ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค. ์์ํํ ๋ฆฌํฐ๋ด ์์: ๋ง๊ทธ๋๋ก, ์ซ์๋ฅผ ์๋ฏธํ๋ฉฐ C++์์ ์ซ์๋ค์ ์์๋ก ํํ๋๋ค. ex) 1.1 or 3 ์ฌ๋ณผ๋ฆญ ์์: ์์ const๋ฅผ ๋ถ์ฌ ์์์ฒ๋ผ ์ฌ์ฉํ๋ค. ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ๋ฉฐ, ๊ฐ์ ์์ ํ ์ ์๋ค. ์ฌ๋ณผ๋ฆญ ์์๋ ์๋์ ๊ฐ์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋ ๋ ์ฌ์ฉํ๋ค. ์ฃผ๋ก for, ํจ์ ๋ฑ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ๋๋ ์ฌ์ด์ฆ์ ๊ฐ์ ๋ณ์๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉํ๋ค. 1
2
3
bool operator > ( const Entry & lhs , const Entry & rhs ) { return lhs . time > rhs . time ; } ์ฐ์ฐ์ ๋
ผ๋ฆฌ๋ && , || , ! ๊ฐ ์๋ค๋ ๊ฒ๋ง ๊ธฐ์ตํ๋ฉด ๋๋ค. & ๋์๋๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ AND ์ฐ์ฐ) ๋์๋๋ ๋นํธ ์ค์์ ํ๋๋ผ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ OR ์ฐ์ฐ) ^ ๋์๋๋ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1์ ๋ฐํํจ. (๋นํธ XOR ์ฐ์ฐ) ~ ๋นํธ๋ฅผ 1์ด๋ฉด 0์ผ๋ก, 0์ด๋ฉด 1๋ก ๋ฐ์ ์ํด. (๋นํธ NOT ์ฐ์ฐ, 1์ ๋ณด์) ยซ ์ง์ ํ ์๋งํผ ๋นํธ๋ค์ ์ ๋ถ ์ผ์ชฝ์ผ๋ก ์ด๋์ํด. (left shift ์ฐ์ฐ) ยป ๋ถํธ๋ฅผ ์ ์งํ๋ฉด์ ์ง์ ํ ์๋งํผ ๋นํธ๋ฅผ ์ ๋ถ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํด. (right shift ์ฐ์ฐ) ์ผํญ์ฐ์ฐ์(์กฐ๊ฑด์ย ?ย ๋ฐํ๊ฐ1ย :ย ๋ฐํ๊ฐ2) ํฌ์ธํฐ ์ฐ์ฐ์ ์ ์ธ: ํฌ์ธํฐ๋ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ฃผ์์ฐ์ฐ์(&): &์ ์ฐธ์กฐ ๋ณ์๋ก๋ ์ฌ์ฉ๋๋ค. ์ฐธ์กฐ์ฐ์ฐ์(*) ํฌ์ธํฐ ์ฐ์ฐ(++, โ): ํด๋น ํฌ์ธํฐ์ ํ์
์ ํฌ๊ธฐ๋งํผ ์ฆ๊ฐ, ๊ฐ์ํ๋ค.(ex. int ํ์ด๋ฉด 4๋ฐ์ดํธ๋งํผ) ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ๋ ์๋ก ๋์ฒดํ ์ ์๋ค. ๋ฐฐ์ด์ ์ด๋ฆ์ ํฌ์ธํฐ์ ๊ฑฐ์ ์ ์ฌํ๋ค. ์์๋ผ๋ ์ (๋ค๋ฅธ ๋ฐฐ์ด์ ๋์
ํ ์ ์๋ค๋ ์ ) ex) arr1 โ arr2 ์ ์ ์ธํ๊ณ ๋ ๋๊ฐ๋ค. ๋ฐฐ์ด์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ํฌ์ธํฐ์ฒ๋ผ ์ฐ์ฐ์ ํ ์ ์๋ค. 1
2
3
4
5
int arr [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; int * ptr = arr ; // ์์ ์๋์ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค. cout << * arr << '\n' << * ( arr + 9 ); cout << * ptr << '\n' << * ( ptr + 9 ); โ๋ฐฐ์ด ํน์ ํฌ์ธํฐ์ ๊ด๋ จ๋ ์ฐ์ฐ์ ํ ๋๋ ์ฃผ์ํด์ผํ๋ค. ์ค์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(ex. ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋์ด์ ์ ๊ทผ)์ ํ ๋ ์ปดํ์ผ๋ฌ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ํ๋ก๊ทธ๋จ์ ๋์์ํจ๋ค.โ ์ ๋ฌ ๋ฐฉ์ [์์ ๋ณต์ฌ vs ๊น์ ๋ณต์ฌ] โ๋จ์ง ์ฃผ์๊ณต๊ฐ๋ง ๊ฐ๋ฅดํค๋ ๊ฐ? ์๋ก์ด ์ฃผ์๊ณต๊ฐ์ ํ ๋นํ๋๊ฐ?โ๊ฐ ๊ธฐ์ค์ด๋๋ค. ์์ ๋ณต์ฌ๋ ์์ ๋ณต์ฌ์ ๊ฒฝ์ฐ ๋์ ํ ๋น์ ๋ฐ์ ๋ณ์์ ์ฃผ์๊ฐ์ ๊ณต์ ํ๋ค. ๊น์ ๋ณต์ฌ๋ ๊น์ ๋ณต์ฌ๋ ์๋ก์ด ๋์ ํ ๋น์ ๋ฐ๊ณ , ์๋ณธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.(์์ ํ ๋ค๋ฅธ ๊ฐ๋ณ์ ์ธ ๊ฐ์ฒด๊ฐ ๋๋ค.) [call by value vs call by reference] C์ธ์ด์์ ํจ์ ํ๋ผ๋ฏธํฐ ๋ฐฉ์์ ๊ฐ์ ์ํ ์ ๋ฌ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค. ๋งค๊ฐ๋ณ์์ ๊ฐ๋ง ๋ณต์ฌํ๋ค. ๋ง์ฝ ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ ์งํํ๋ค. Namespace ์ด๋ฆ ์ถฉ๋ ๋ฌธ์ ๋ฅผ C++์์๋ ๋ค์์คํ์ด์ค(namespace) ๋ฅผ ํตํด ํด๊ฒฐํ๊ณ ์๋ค. ์ ๊ทผ ๋ฐฉ๋ฒ: ๋ค์์คํ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ๋ฒ์ ์ง์ ์ฐ์ฐ์ ( ::, scope resolution operator)๋ฅผ ์ฌ์ฉํ์ฌ, ํด๋น ์ด๋ฆ์ ํน์ ๋ค์์คํ์ด์ค๋ก ์ ํํ๋ฉด ๋๋ค. ๋ค์์คํ์ด์ค์ ์ํ ์ด๋ฆ์ ์ฌ์ฉํ ๋๋ง๋ค ๋งค๋ฒ ๋ฒ์ ์ง์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ์ ํ ํ๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํ๋ค. ๋ํ, ๊ธธ์ด์ง ์ฝ๋๋ก ์ธํด ๊ฐ๋
์ฑ ๋ํย ๋จ์ด์ง๊ฒ ๋๋ค. C++์์๋ ์ด๋ฌํ ๋ถํธํจ์ ํด์ํ ์ ์๋๋กย ๋ค์๊ณผ ๊ฐ์ย ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์๋ค. using ์ง์์(directive): usingย namespaceย ๋ค์์คํ์ด์ค์ด๋ฆ; using ์ ์ธ(declaration): usingย ๋ค์์คํ์ด์ค์ด๋ฆ::์ด๋ฆ; 1
2
3
4
using std :: cout ; int main () { cout << "Hello, World!" << std :: endl ; } ํฌ์ธํฐ vs ์ฐธ์กฐ(&) ํฌ์ธํฐ๋ ํ๋์ ๋ณ์์ด๋ค. ์ฐธ์กฐ๋ ๋ณ์๋ผ๊ณ ๋ณด๊ธฐ์๋ ๋ถ์กฑํ๋ค. ์ฌ๋ฐ์ธ๋ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ํ๋ฒ ์ฐธ์กฐํ ๋ณ์(๋ฉ๋ชจ๋ฆฌ)๋ฅผ ๊ฒฐ์ ํ์ผ๋ฉด ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๋ป์ด๋ค. 1
2
3
4
int x = 10 ; int y = 10 ; int & ref = x ; // ์ฐธ์กฐ ๋์์ y๋ก ๋ฐ๊พธ๊ฑฐ๋ ํ ์ ์๋ค. ref = 20 ; ์๊ฐ๋ณต์ก๋ ์๊ฐ๋ณต์ก๋, ๋ฌธ์ ๋ถ๋ฅ ๋ฉ๋ชจ๋ฆฌ C์ธ์ด ๋์ ํ ๋น C์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์๋ก malloc, calloc, realloc์ด ์กด์ฌํ๋ค. malloc๊ณผ calloc์, void* ํ์
์ ๋ฆฌํดํ๋ฉฐ ์ง์ ์บ์คํ
ํด์ผ ํ๋ค. ex) char* p = (char*) malloc(sizeof(char)*10); malloc๊ณผ calloc์ ์ฐจ์ด์ ์ calloc์ ์ฌ์ด์ฆ๋ฅผ ์
๋ ฅ ์ผ๋ก ๋ฃ์ด์ฃผ๊ณ 0์ผ๋ก ์ด๊ธฐํ ํด์ค๋ค. realloc์ ์์ ๋๊ฐ์ง ์ ํ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ํ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ๋๋ฆฌ๊ฑฐ๋, ์ค์ด๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. void* realloc(void* p, size_t size) ์ด๋ ๊ฒ ์์ฑํ ๊ณต๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋, ๋ด๊ฐ ์ง์ ํด์ ์์ผ์ผ ํ๋ค. free() ๋ฅผ ํตํด ํด์ ํ๋ค.( PC๋ฅผ ๋๊ธฐ ์ ๊น์ง ํด์ฒดํ์ง ์์ผ๋ฉด ์ ์ ๋๋ค.) realloc()์ ๋ํ์ ๋ฌธ์ ๋ ์ ๋ง ํน์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์คํจํ ๊ฒฝ์ฐ null์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด ์๋ ํฌ์ธํฐ๋ฅผ ์์ด๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค. ๋ํ ์ฌ๋ฌ ํฌ์ธํฐ๊ฐ ์ฃผ์๊ณต๊ฐ์ ๊ณต์ ํ๋ ์ํฉ์ด๋ผ๋ฉด, realloc ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ค๋ฅธ ํฌ์ธํฐ๋ค์ ์ด์ํ ๊ณณ์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค. C++ ๋์ ํ ๋น(New) New๋ฅผ ํตํด์ ๋์ ํ ๋น์ ์งํํ๋ค. ํ์
*ย ํฌ์ธํฐ์ด๋ฆย =ย newย ํ์
; ๋ฐํ๋ช
๋ น์ด๋ deleteย ํฌ์ธํฐ์ด๋ฆ; ์๋๋ ์ฅ์ ๋ชฉ๋ก์ด๋ค. ํ์
์์ ์ฑ (์๋์ผ๋ก ํ์
๋ณํ) ์์ธ ์ฒ๋ฆฌ (์คํจํ๋ฉด ์์ธ ์ฒ๋ฆฌ, ๋ฐ๋ฉด malloc์ NULL๋ง ๋ฐํ) ์๋์ผ๋ก ์ฌ์ด์ฆ ๊ณ์ฐ (sizeof ํ์์์) ๊ฐ์ฒด์ ์์ฑ์๋ฅผ ํธ์ถ(์์ฑ์ ์ด๊ธฐํ ๊ฐ๋ฅ) ์ค๋งํธ ํฌ์ธํฐ new, delete๋ ์๋์ ๋ฌธ์ ๊ฐ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ง์ ๊ด๋ฆฌํด์ค์ผํ๋ค๋ ๋ถํธํ์ ์ด ์๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์ : new ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ๋์ delete ๋ก ํด์ ํด์ผ ํ๋ฉฐ ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฌํ ์ฃผ์์ฌํญ๋ค๋ก ์ธํด C++11 ์ดํ์๋ ์ค๋งํธ ํฌ์ธํฐ( std::unique_ptr , std::shared_ptr ๋ฑ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค๊ณ ํ๋ค. ์ค๋งํธ ํฌ์ธํฐ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๊ตฌ์กฐ์ฒด(struct)์ ๊ณต์ฉ์ฒด(union) ๊ตฌ์กฐ์ฒด๋ ๋ค์ํ ํฌ๊ธฐ์ ํ์
์ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง ์ ์๋ ํ์
์
๋๋ค. ๊ตฌ์กฐ์ฒด๋ ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ๋ฉค๋ฒ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ง์ถ๋ค. ์ด๋ ์๊ธฐ๋ ํจ๋ฉ์ ๋ฐ์ดํธ ํจ๋ฉ์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ ์ถ๊ฐ๋๋ ๋ฐ์ดํธ๋ฅผ ํจ๋ฉ ๋ฐ์ดํธ(padding byte)๋ผ๊ณ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ท์น ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋นํจ ๊ฐ์ฅ ์์ ๋ณ์๋ถํฐ ์ฐ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฑ์, ๋ง์ฝ ํ์ฌ ๋จ์ ๋ฉ๋ชจ๋ฆฌํฌ๊ธฐ๋ณด๋ค ํ์
์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ์ถ๊ฐ์ ์ผ๋ก ํ ๋นํ๊ณ , ๊ธฐ์กด์ ๋จ์ ํฌ๊ธฐ๋ฅผ ํจ๋ฉ์ผ๋ก ์ฑ์๋ฃ์ ๊ณต์ฉ์ฒด ๊ณต์ฉ์ฒด(union)๋ union ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ๋๋ค์๋ ๊ตฌ์กฐ์ฒด์ ๊ฐ์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ ๋ฉค๋ฒ ๋ณ์๊ฐ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค๋ ์ ๋ง์ด ๋ค๋ฅด๋ค. ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ๋ณ์์ ํฌ๊ธฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฉค๋ฒ ๋ณ์ ํ๋๋ง์ ์์ ํด๋ ๋ค๋ฅธ ๊ฐ๋ค ๋ํ ๋ณ๊ฒฝ๋ ์ ์๋ค. 1
2
3
4
5
6
7
8
union ShareData { unsigned char a ; unsigned short b ; unsigned int c ; }; union ShareData data ; data . c = 0x12345678 ; ์ ์ฝ๋์์ a ์ ๊ฐ์ 0x78 ์ด ๋ ๊ฒ์ด๋ฉฐ, b ์ ๊ฐ์ 0x5678 ์ด ๋ ๊ฒ์
๋๋ค. ๋ฐ๋๋ก ๋น
์๋์ ์์คํ
์์๋ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅผ ์ ์๋ค. ๋ฐ์ดํฐ ์ ์ฅ๋ฐฉ์ ex) 0x12345678 ๋๊ฐ๋ก ๋์ ๊ฒ์ ํ๋์ ์ฃผ์๋ ์ฃผ๋ก ๋ฐ์ดํธ ๋จ์์ด๊ธฐ ๋๋ฌธ ๋ฆฌํ์ธ๋์ : ๋ฎ์ ์ฃผ์์, ํ์ ๋นํธ๊ฐ ๋ฃ์ด์ง(์ฆ ์ฃผ์ ์์ผ๋ก ํํํ๋ฉด 78,56,34,12) ๋น
์ธ๋์: ๋ฎ์ ์ฃผ์์, ์์ ๋นํธ๊ฐ ๋ฃ์ด์ง(12,34,56,78) ๋ฆฌํ ์๋์ ๋ฐฉ์์ ๋ฎ์ ์ฃผ์์ ๋ฐ์ดํฐ์ ๋ฎ์ ๋ฐ์ดํธ(LSB : Least Significant Byte)๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ํ์ ์ฌ๋์ด ์ซ์๋ฅผ ์ฌ์ฉํ๋ ์ ํ ๋ฐฉ์๊ณผ ๋ฐ๋๋ก ๊ฑฐ๊พธ๋ก ์ฝ์ด์ผ ํ๋ค. [์ถ์ฒ: ์ํคํผ๋์, https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8] ์์ ์ ๊ทผ์ ์ด ํด๋์ค์์ ์ ๊ทผ ์ ์ด ๋ฐฉ์์ public, private, protected 3๊ฐ์ง๊ฐ ์๋ค. public : ์ ์ฒด ์ ๊ทผ ๊ฐ๋ฅ private : ํด๋์ค ๋ด๋ถ์์๋ง ๊ฐ๋ฅ, ์ ๊ทผ์ ์ด ํค์๋๊ฐ ์์ผ๋ฉด private๊ฐ ๊ธฐ๋ณธ๊ฐ protected : ์์๋ฐ์ โํ์โํด๋์ค, ์์ ์ ํด๋์ค ๋ด๋ถ์์๋ง ๊ฐ๋ฅ friend friend ํด๋์ค๋ friend๋ก ์ ์ธ๋ ๋ค๋ฅธ ํด๋์ค์ย private ๋ฐ protected ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค. friend ํจ์๋ private ๋ฐ protected ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค. ์ค๋ฒ๋ก๋ฉ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋์ ์ผ๋ก ์ค์ ๊ทธ ๊ฐ์ฒด์ ํ์
์ ๋ง๋ ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ด๊ณ , ์ค๋ฒ๋ก๋ฉ์ ์ ์ ์ผ๋ก ๋งค๊ฐ๋ณ์์ ๋ง๋ ํจ์๋ฅผ ์ ํํ์ฌ ์คํํ๋ ๊ฒ์ด๋ค. virtual์ด๋? virtual ์ C++์ ๋คํ์ฑ์ ๊ตฌํํ๊ธฐ ์ํ ํค์๋๋ก abstract method ์ด๋ค. ์ด๋ฅผ ํตํด ํ์ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ๋ ์ ์๋ค. virtual ํจ์๋ฅผ ํธ์ถํ๋ฉด, ์ปดํ์ผ๋ฌ๋ ๊ฐ์ฒด์ ํ์
์ด ์๋ ์ฐธ์กฐ๋ฅผ ํตํด ๊ฐ๋ฆฌํค๋ ์ค์ ๊ฐ์ฒด์ ํ์
์ ํ์ธ ํ์ฌ ์ ์ ํ ํจ์๋ฅผ ํธ์ถํ๋ค. ๋ด๋ถ์ ์ผ๋ก๋ ๊ฐ์ ํจ์ ํ
์ด๋ธ ์ ์ฌ์ฉํ์ฌ, ํ์ฌ์ ํ์
์ด ์๋ ์ค์ฒด๋ฅผ ๋งตํํ๋ค. ์๋์ ์ฝ๋์์ (1) ์ ๊ฒฝ์ฐ์์ Base ํ์
์ ํจ์๊ฐ ์๋ ์ค์ฒด์ ํจ์ Derived show, display๋ฅผ ๋งตํํ๋ค. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Base { public: virtual void show () { cout << "Base class show function" << endl ; } virtual void display () { cout << "Base class display function" << endl ; } }; class Derived : public Base { public: void show () override { cout << "Derived class show function" << endl ; } void display () override { cout << "Derived class display function" << endl ; } }; int main () { ** ( 1 ) ** Base * basePtr = new Derived (); } ์
์บ์คํ
๊ณผ ๋ค์ด์บ์คํ
์
์บ์คํ
= ํ์ ํ์
์์ ์์ ํ์
์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด๋ค. ๋ค์ด ์บ์คํ
์ ๋ฐ๋๋ก ์์์์ ํ์๋ก ์ฐธ์กฐํ๋ค. ์
์บ์คํ
์ ์์ ํ๋, ๋ค์ด์บ์คํ
์ ๋ถ์์ ํ๋ค. ํ ๊ฒ์ด๋ผ๋ ์์ํ์
์์ ์๋์ฐจ๋ผ๋ ํ์ํ์
์ผ๋ก ์บ์คํ
ํ๋ฉด, ๋ง์ฝ ์ค์ฒด๊ฐ ๋นํ๊ธฐ๋ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. 1
2
Derived d ; Base * ptr = & d ; // ์
์บ์คํ
String C++์ std::string ํด๋์ค์ C ์คํ์ผ ์คํธ๋ง ๊ฐ์ ์ฃผ์ ์ฐจ์ด์ ์ ์๋์ ๊ฐ๋ค. C ์คํ์ผ ์คํธ๋ง : ๋ฌธ์๋ค์ ๋ฐฐ์ด๋ก, ๋( '\0' ) ๋ฌธ์๋ก ์ข
๋ฃ๋๋ค. ์: char myStr[] = "Hello"; ๋ง์ง๋ง ๋ฌธ์์ด์ ๋ ๋ฌธ์๊ฐ ์
๋ ฅ๋๋ค. std::string : C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค๋ก์, ๋ฌธ์๋ค์ ๋์ ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ค๋ก ๊ตฌ์ฑ๋๋ค. ํฌ๊ธฐ์กฐ์ : C์คํ์ผ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, C++ ์คํ์ผ์ ๊ฐ๋ฅํ๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ๋ค. 1
2
3
4
5
6
char string1 [ 5 ] = "1234" ; printf ( "%s" , string1 ); abc [ 3 ] = '\0' ; printf ( "%s" , string1 ); // ์๋ฌ ๋ฐ์, ํฌ๊ธฐ๋ฅผ ๋์ด์ฌ (12345'\0') ์ด 6๊ฐ์ ๋ฌธ์๊ฐ ๋์
๋๊ธฐ์, ํฌ๊ธฐ๋ฅผ ๋์ด์ฌ char string2 [ 5 ] = "12345" ; ์ธ๋ผ์ธ ํจ์ ์์ ๊ฐ์ด C++์์ ํจ์์ ํธ์ถ ์ ๊ฝค ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก, ์ฝ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ํจ์์ ์คํ ์๊ฐ์ด ๋งค์ฐ ์งง๋ค๋ฉด, ํจ์ ํธ์ถ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ๋ถ๋ด์ด ๋ ์ ์๋ค. ์ธ๋ผ์ธ ํจ์๋ ํธ์ถ๋ ๋ ์ผ๋ฐ์ ์ธ ํจ์์ ํธ์ถ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ , ํจ์์ ๋ชจ๋ ์ฝ๋๋ฅผ ํธ์ถ๋ ์๋ฆฌ์ ๋ฐ๋ก ์ฝ์
ํ๋ ๋ฐฉ์์ ํจ์์ด๋ค. ์ด ๋ฐฉ์์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ์ฝ๋๋, ์ฌ๊ท์ ๊ฐ์ ํจ์์ ์ฌ๋ฌ ์ด์ ์ ์ฌ์ฉํ ์ ์๋ค. ์ธ๋ผ์ธ ํจ์ ์ฌ์ฉ์ ๋จ์ ์ ์ปดํ์ผ ์๊ฐ(์ธ๋ผ์ธ ํจ์ ์นํ) ์ฆ๊ฐ, ๋๋ฒ๊น
์๊ฐ ์ฆ๊ฐ, ์ฌ๊ท ๋ถ๊ฐ๋ฅ์ด ์๋ค. ํจ์ ํฌ์ธํฐ ํจ์ ํฌ์ธํฐ๋ ๋ง ๊ทธ๋๋ก ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ค. ํ๋ก๊ทธ๋จ์์ ์ ์๋ ํจ์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋ชจ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ฉฐ ํจ์ ํฌ์ธํฐ๋ ํจ์์ ์ฒซ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
** double ( * calc )( double , double ) = NULL ; // ํจ์ ํฌ์ธํฐ ์ ์ธ** double num1 = 3 , num2 = 4 , result = 0 ; char oper = '*' ; switch ( oper ) { case '+' : calc = Add ; break ; case '-' : calc = Sub ; break ; case '*' : calc = Mul ; break ; case '/' : calc = Div ; break ; default: cout << "์ฌ์น์ฐ์ฐ(+, -, *, /)๋ง์ ์ง์ํฉ๋๋ค." ; } break ; } STL STL ์ปจํ
์ด๋ ์ ๋ฆฌ ๊ทธ์ธ volatile ํค์๋๋ฅผ ํตํด ์ปดํ์ผ๋ฌ์๊ฒ ์ต์ ํ๋ฅผ ์ ํํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. voliatile๋ก ์ ์ธํ ๋ณ์๋ ์ปดํ์ผ๋ฌ๊ฐ ํด๋น ๋ณ์๋ฅผ ์ต์ ํ์์ ์ ์ธํ์ฌ ํญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋๋ก ํ๋ ํค์๋์
๋๋ค. ์๋์ ๊ฐ์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ๋๋ฒ์งธ ์ฝ๋๋ก ํด์ํ์ฌ ์ต์ ํํ๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด volatile ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. [๊ธฐ์กด ์ฝ๋] 1
2
3
4
5
6
7
8
static int foo ; void bar ( void ) { foo = 0 ; while ( foo != 255 ); } [์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํํ ์ฝ๋] 1
2
3
4
5
6
void bar_optimized ( void ) { foo = 0 ; while ( true ); } ์ด๊ธฐํ ์ด๊ฑฐ๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ค๊ฐ ๋ฐ๊ฒฌํ ๊ฒ์ด๋ค. ๊ฒ์ ํ์ฌ ๋ฉด์ ์์ ์๋์ ๊ฐ์ด ์ด๊ธฐํ ๋ฐฉ๋ฒ์ ๋ฌผ์ด๋ดค๋ค๊ณ ํ๋ค. ๋ชฐ๋๋ ์ฌ์ค์ธ๋ฐ ์๋์ ์ด๊ธฐํ๋ฅผ ์งํํ๋ฉด ์ฐ์ฐ์ด ํ๋๋ก ์ค์ด๋ ๋ค๊ณ ํ๋ค. 1
2
3
4
5
Car () { ๋ฐํด = 4 ; ์์ง = 1 ; ๊ธฐ๋ฆ = 0 ; } 1
2
3
Car () : ๋ฐํด ( 4 ), ์์ง ( 1 ), ๊ธฐ๋ฆ ( 0 ) { } ์์ฑํ ์ด๊ธฐํ๊ฐ ํ๋ฒ์ ์งํํ๊ณ , ์์ฑ์ ์ด๊ธฐํ๋ ํ๋ฒ์ ์ฐ์ฐ๊ณผ์ ์ด ๋ ํ์ํ๋ ๋น์ฉ์ด 2๋ฐฐ๋ผ๊ณ ํ๋ค. ์ฐธ๊ณ ์๋ฃ https://tcpschool.com/c/c_intro_programming https://velog.io/@mardi2020/C-๋ฉด์ -์ง๋ฌธ-์ ๋ฆฌ https://se-jung-h.tistory.com/entry/C-C-๊ธฐ์ -๋ฉด์ -์ง๋ฌธ https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS1726560277&cate_cd= |
| Markdown | [](https://www.handongbee.com/)
# [86\.5๐ก๏ธ](https://www.handongbee.com/)
์ด๊ฒ์ ๊ฒ ๊ณต๋ถํ ๋ด์ฉ์ ์ฌ๋ฆฝ๋๋ค.
- [HOME](https://www.handongbee.com/)
- [CATEGORIES](https://www.handongbee.com/categories/)
- [ACTIVITY](https://www.handongbee.com/activity/)
- [ABOUT](https://www.handongbee.com/about/)
[Home](https://www.handongbee.com/) ํ ํ์ด์ง์ Cpp ๋ชจ๋ ์ ๋ฆฌํ๊ธฐ
Post
Cancel
# ํ ํ์ด์ง์ Cpp ๋ชจ๋ ์ ๋ฆฌํ๊ธฐ
Posted
Nov 15, 2023
By *[Dongbee](https://www.handongbee.com/posts/Cpp%EC%A0%95%EB%A6%AC/)* *26 min* read
ํ ํ์ด์ง๋ก ๋๋ด๋ C++ ๋ฌธ๋ฒ
### C++ vs C
C++์ ๊ฐ์ฒด์งํฅ์ ์ธ์ด์ธ Simula์ ๊ฐ๋
์ C์ธ์ด์ ์ถ๊ฐํ์ฌ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ์ธ์ด์ด๋ค.
์ ๋ค๋ฆญ, ๊ฐ์ฒด์งํฅ, ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
### ์ฝ๋ ์คํ ๋ฐฉ์
์์ค์ฝ๋๊ฐ ์คํํ์ผ์ด ๋์ด์ผ, ์คํํ ์ ์๋ค.
1. ์ ํ์ฒ๋ฆฌ๊ธฐ: โ\#โ ๋ฌธ์๋ก ์์ํ๋ ์ ํ์ฒ๋ฆฌ ์ง์๋ฌธ(\#define)์ ์ฒ๋ฆฌํ๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์์
ํ๊ธฐ ์ข๋๋ก ์์ค๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ์ญํ ์ ํ๋ค.
2. ์ปดํ์ผ๋ฌ: ์์ค์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ค.(`.o`, `.obj`)
3. ๋ง์ปค: ์ค๋ธ์ ํธ ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ, ์๋์ฝ๋(OS์์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํจ)๋ฅผ ํฉ์ณ ํ๋์ ์คํ ํ์ผ์ ๋ง๋ ๋ค.
์ฐ๋ฆฌ๋ ๋ง์ปค์์ ๋ง๋ค์ด์ง ์คํํ์ผ์ ํตํด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ค.
vscode์์ Code Runner๋ฅผ ํตํด Cpp ํ์ผ์ ์คํ์ํค๋ฉด ํฐ๋ฏธ๋์์ ์๋์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๊ฐ ์
๋ ฅ๋๋ค.
``
์ด๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถ์ํ๋ฉด, ๋๋ ํฐ๋ฆฌ๋ฅผ ์์
ํ๊ฒฝ์ผ๋ก ์ฎ๊ธฐ๊ณ g++ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์ฝ๋๋ฅผ ์ฝ์ด a.out ์คํํ์ผ์ ๋ง๋ ๋ค. ์ดํ ํด๋น ์คํํ์ผ์ ์คํ์ํจ๋ค.
### ํ์
๋ณํ
- ๋ฌต์์ ๋ณํ
๋ง์ฝ, ์๋ก ๋ค๋ฅธ ํ์
์ผ๋ก ์ฐ์ฐ์ ์งํํ๋ฉด, ๊ฒฐ๊ณผ๋ฌผ์ ํ์
์ ๋ ๋ฒ์๊ฐ ํฐ ์ชฝ์ผ๋ก ๋ณํ๋๋ค. ์ฐ์ ์ฐ์ฐ ์์๋ ๋ฐ์ดํฐ์ ์์ค์ด ์ต์ํ๋๋ ๋ฐฉํฅ์ผ๋ก ๋ฌต์์ ํ์
๋ณํ์ด ์งํ๋ฉ๋๋ค.
- ๋ช
์์ ๋ณํ
1. (๋ณํํ ํ์
) ๋ณํํ ๋ฐ์ดํฐ // C์ธ์ด์ C++ ๋ ๋ค ์ฌ์ฉ ๊ฐ๋ฅํจ.
2. ๋ณํํ ํ์
(๋ณํํ ๋ฐ์ดํฐ) // C++์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํจ.
- `static`
์ ์ ๋ณ์๋ฅผ ์๋ฏธํ๊ณ , ์ด๋ ํจ์์ ํธ์ถ์ด ๋๋๋ ์ฌ๋ผ์ง๋ ์ง์ญ ๋ณ์์๋ ๋ค๋ฅด๊ฒ ์ง์์ ์ผ๋ก **๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ง**ํ๋ค.
- **๊ฐ์ ์ด๋ฆ์ ๋ณ์ ์ ๊ทผ ์์**
๋จผ์ **๊ฐ๊น์ด ๋ธ๋ฝ๋จ์**์ ์์ฑ๋ ์ง์ญ ๋ณ์์์๋ถํฐ ์ ์ ๋ฉ๋ฆฌ๋๊ฐ๋ค. ์ฆ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ์ธ๋ ์ง์ญ๋ณ์์ ์ ์ญ๋ณ์๊ฐ ์์ผ๋ฉด ์ง์ญ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
### Auto
C++11 ๋ฒ์ ์์ ์๊ฒจ๋ฌ๊ณ , ์ปดํ์ผ๋ฌ ๋จ๊ณ์์ ์๋์ผ๋ก ํ์
์ ํ ๋นํ๋ค. ์ํ์์๋ ํธํ์ง๋ง, ํ์
์ด ํท๊ฐ๋ฆด ๋๋ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค.
### ์์ํํ
1. ๋ฆฌํฐ๋ด ์์: ๋ง๊ทธ๋๋ก, ์ซ์๋ฅผ ์๋ฏธํ๋ฉฐ C++์์ ์ซ์๋ค์ ์์๋ก ํํ๋๋ค. ex) 1.1 or 3
2. ์ฌ๋ณผ๋ฆญ ์์: ์์ const๋ฅผ ๋ถ์ฌ ์์์ฒ๋ผ ์ฌ์ฉํ๋ค. ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ๋ฉฐ, ๊ฐ์ ์์ ํ ์ ์๋ค.
์ฌ๋ณผ๋ฆญ ์์๋ ์๋์ ๊ฐ์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋ ๋ ์ฌ์ฉํ๋ค. ์ฃผ๋ก for, ํจ์ ๋ฑ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ๋๋ ์ฌ์ด์ฆ์ ๊ฐ์ ๋ณ์๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉํ๋ค.
``
### ์ฐ์ฐ์
- ๋
ผ๋ฆฌ์ฐ์ฐ์
๋
ผ๋ฆฌ๋ `&&`, `||`, `!`๊ฐ ์๋ค๋ ๊ฒ๋ง ๊ธฐ์ตํ๋ฉด ๋๋ค.
- ๋นํธ์ฐ์ฐ์
| & | ๋์๋๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ AND ์ฐ์ฐ) | |
|---|---|---|
| | | ๋์๋๋ ๋นํธ ์ค์์ ํ๋๋ผ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ OR ์ฐ์ฐ) |
| ^ | ๋์๋๋ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1์ ๋ฐํํจ. (๋นํธ XOR ์ฐ์ฐ) | |
| ~ | ๋นํธ๋ฅผ 1์ด๋ฉด 0์ผ๋ก, 0์ด๋ฉด 1๋ก ๋ฐ์ ์ํด. (๋นํธ NOT ์ฐ์ฐ, 1์ ๋ณด์) | |
| ยซ | ์ง์ ํ ์๋งํผ ๋นํธ๋ค์ ์ ๋ถ ์ผ์ชฝ์ผ๋ก ์ด๋์ํด. (left shift ์ฐ์ฐ) | |
| ยป | ๋ถํธ๋ฅผ ์ ์งํ๋ฉด์ ์ง์ ํ ์๋งํผ ๋นํธ๋ฅผ ์ ๋ถ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํด. (right shift ์ฐ์ฐ) | |
- ์ผํญ์ฐ์ฐ์(์กฐ๊ฑด์ ? ๋ฐํ๊ฐ1 : ๋ฐํ๊ฐ2)
- ํฌ์ธํฐ ์ฐ์ฐ์
- ์ ์ธ: ํฌ์ธํฐ๋ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
``
- ์ฃผ์์ฐ์ฐ์(&): &์ ์ฐธ์กฐ ๋ณ์๋ก๋ ์ฌ์ฉ๋๋ค.
- ์ฐธ์กฐ์ฐ์ฐ์(\*)
- ํฌ์ธํฐ ์ฐ์ฐ(++, โ): ํด๋น ํฌ์ธํฐ์ ํ์
์ ํฌ๊ธฐ๋งํผ ์ฆ๊ฐ, ๊ฐ์ํ๋ค.(ex. int ํ์ด๋ฉด 4๋ฐ์ดํธ๋งํผ)
### ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
๋ฐฐ์ด๊ณผ ํฌ์ธํฐ๋ ์๋ก ๋์ฒดํ ์ ์๋ค. ๋ฐฐ์ด์ ์ด๋ฆ์ ํฌ์ธํฐ์ ๊ฑฐ์ ์ ์ฌํ๋ค. ์์๋ผ๋ ์ (๋ค๋ฅธ ๋ฐฐ์ด์ ๋์
ํ ์ ์๋ค๋ ์ ) `ex) arr1 โ arr2` ์ ์ ์ธํ๊ณ ๋ ๋๊ฐ๋ค. ๋ฐฐ์ด์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ํฌ์ธํฐ์ฒ๋ผ ์ฐ์ฐ์ ํ ์ ์๋ค.
``
โ๋ฐฐ์ด ํน์ ํฌ์ธํฐ์ ๊ด๋ จ๋ ์ฐ์ฐ์ ํ ๋๋ ์ฃผ์ํด์ผํ๋ค. ์ค์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(ex. ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋์ด์ ์ ๊ทผ)์ ํ ๋ ์ปดํ์ผ๋ฌ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ํ๋ก๊ทธ๋จ์ ๋์์ํจ๋ค.โ
### ์ ๋ฌ ๋ฐฉ์
**\[์์ ๋ณต์ฌ vs ๊น์ ๋ณต์ฌ\]**
โ๋จ์ง ์ฃผ์๊ณต๊ฐ๋ง ๊ฐ๋ฅดํค๋ ๊ฐ? ์๋ก์ด ์ฃผ์๊ณต๊ฐ์ ํ ๋นํ๋๊ฐ?โ๊ฐ ๊ธฐ์ค์ด๋๋ค.
- ์์ ๋ณต์ฌ๋ **์์ ๋ณต์ฌ์ ๊ฒฝ์ฐ ๋์ ํ ๋น์ ๋ฐ์ ๋ณ์์ ์ฃผ์๊ฐ์ ๊ณต์ ํ๋ค.**
- ๊น์ ๋ณต์ฌ๋ **๊น์ ๋ณต์ฌ๋ ์๋ก์ด ๋์ ํ ๋น์ ๋ฐ๊ณ , ์๋ณธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.(์์ ํ ๋ค๋ฅธ ๊ฐ๋ณ์ ์ธ ๊ฐ์ฒด๊ฐ ๋๋ค.)**
**\[call by value vs call by reference\]**
C์ธ์ด์์ ํจ์ ํ๋ผ๋ฏธํฐ ๋ฐฉ์์ ๊ฐ์ ์ํ ์ ๋ฌ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค. ๋งค๊ฐ๋ณ์์ ๊ฐ๋ง ๋ณต์ฌํ๋ค. ๋ง์ฝ ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ ์งํํ๋ค.
### Namespace
์ด๋ฆ ์ถฉ๋ ๋ฌธ์ ๋ฅผ C++์์๋ **๋ค์์คํ์ด์ค(namespace)**๋ฅผ ํตํด ํด๊ฒฐํ๊ณ ์๋ค.
์ ๊ทผ ๋ฐฉ๋ฒ: ๋ค์์คํ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ **๋ฒ์ ์ง์ ์ฐ์ฐ์**(`::,` scope resolution operator)๋ฅผ ์ฌ์ฉํ์ฌ, ํด๋น ์ด๋ฆ์ ํน์ ๋ค์์คํ์ด์ค๋ก ์ ํํ๋ฉด ๋๋ค.
๋ค์์คํ์ด์ค์ ์ํ ์ด๋ฆ์ ์ฌ์ฉํ ๋๋ง๋ค **๋งค๋ฒ ๋ฒ์ ์ง์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ์ ํ**ํ๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํ๋ค. ๋ํ, ๊ธธ์ด์ง ์ฝ๋๋ก ์ธํด ๊ฐ๋
์ฑ ๋ํ ๋จ์ด์ง๊ฒ ๋๋ค.
C++์์๋ ์ด๋ฌํ ๋ถํธํจ์ ํด์ํ ์ ์๋๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์๋ค.
1. using ์ง์์(directive): `usingย namespaceย ๋ค์์คํ์ด์ค์ด๋ฆ;`
``
2. using ์ ์ธ(declaration): `usingย ๋ค์์คํ์ด์ค์ด๋ฆ::์ด๋ฆ;`
``
### ํฌ์ธํฐ vs ์ฐธ์กฐ(&)
ํฌ์ธํฐ๋ ํ๋์ ๋ณ์์ด๋ค. ์ฐธ์กฐ๋ ๋ณ์๋ผ๊ณ ๋ณด๊ธฐ์๋ ๋ถ์กฑํ๋ค. ์ฌ๋ฐ์ธ๋ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ํ๋ฒ ์ฐธ์กฐํ ๋ณ์(๋ฉ๋ชจ๋ฆฌ)๋ฅผ ๊ฒฐ์ ํ์ผ๋ฉด **๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๋ป์ด๋ค.**
``
### ์๊ฐ๋ณต์ก๋
[์๊ฐ๋ณต์ก๋, ๋ฌธ์ ๋ถ๋ฅ](https://www.notion.so/d6ac26bb23c74ebaa333f03bacda6111)
### ๋ฉ๋ชจ๋ฆฌ
#### C์ธ์ด ๋์ ํ ๋น
C์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์๋ก malloc, calloc, realloc์ด ์กด์ฌํ๋ค.
**malloc๊ณผ calloc์, void\* ํ์
์ ๋ฆฌํดํ๋ฉฐ** ์ง์ ์บ์คํ
ํด์ผ ํ๋ค.
- ex) `char* p = (char*) malloc(sizeof(char)*10);`
malloc๊ณผ calloc์ ์ฐจ์ด์ ์ **calloc์ ์ฌ์ด์ฆ๋ฅผ ์
๋ ฅ**์ผ๋ก ๋ฃ์ด์ฃผ๊ณ **0์ผ๋ก ์ด๊ธฐํ**ํด์ค๋ค.
realloc์ ์์ ๋๊ฐ์ง ์ ํ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ํ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ๋๋ฆฌ๊ฑฐ๋, ์ค์ด๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. `void* realloc(void* p, size_t size)`
์ด๋ ๊ฒ ์์ฑํ ๊ณต๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋, **๋ด๊ฐ ์ง์ ํด์ ์์ผ์ผ ํ๋ค.** `free()`๋ฅผ ํตํด ํด์ ํ๋ค.(**PC๋ฅผ ๋๊ธฐ ์ **๊น์ง ํด์ฒดํ์ง ์์ผ๋ฉด ์ ์ ๋๋ค.)
realloc()์ ๋ํ์ ๋ฌธ์ ๋ ์ ๋ง ํน์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์คํจํ ๊ฒฝ์ฐ **null์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด ์๋ ํฌ์ธํฐ๋ฅผ ์์ด๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.** ๋ํ ์ฌ๋ฌ ํฌ์ธํฐ๊ฐ ์ฃผ์๊ณต๊ฐ์ ๊ณต์ ํ๋ ์ํฉ์ด๋ผ๋ฉด, realloc ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ค๋ฅธ ํฌ์ธํฐ๋ค์ ์ด์ํ ๊ณณ์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
#### C++ ๋์ ํ ๋น(New)
New๋ฅผ ํตํด์ ๋์ ํ ๋น์ ์งํํ๋ค. `ํ์
*ย ํฌ์ธํฐ์ด๋ฆย =ย newย ํ์
;` ๋ฐํ๋ช
๋ น์ด๋ `deleteย ํฌ์ธํฐ์ด๋ฆ;` ์๋๋ ์ฅ์ ๋ชฉ๋ก์ด๋ค.
- **ํ์
์์ ์ฑ**(์๋์ผ๋ก ํ์
๋ณํ)
- **์์ธ ์ฒ๋ฆฌ**(์คํจํ๋ฉด ์์ธ ์ฒ๋ฆฌ, ๋ฐ๋ฉด malloc์ NULL๋ง ๋ฐํ)
- ์๋์ผ๋ก **์ฌ์ด์ฆ ๊ณ์ฐ**(sizeof ํ์์์)
- ๊ฐ์ฒด์ **์์ฑ์๋ฅผ ํธ์ถ(์์ฑ์ ์ด๊ธฐํ ๊ฐ๋ฅ)**
#### ์ค๋งํธ ํฌ์ธํฐ
new, delete๋ ์๋์ ๋ฌธ์ ๊ฐ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ง์ ๊ด๋ฆฌํด์ค์ผํ๋ค๋ ๋ถํธํ์ ์ด ์๋ค.
**๋ฉ๋ชจ๋ฆฌ ๋์**: **`new`**๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ๋์ **`delete`**๋ก ํด์ ํด์ผ ํ๋ฉฐ ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฌํ ์ฃผ์์ฌํญ๋ค๋ก ์ธํด C++11 ์ดํ์๋ ์ค๋งํธ ํฌ์ธํฐ(**`std::unique_ptr`**, **`std::shared_ptr`** ๋ฑ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค๊ณ ํ๋ค. ์ค๋งํธ ํฌ์ธํฐ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
### ๊ตฌ์กฐ์ฒด(struct)์ ๊ณต์ฉ์ฒด(union)
๊ตฌ์กฐ์ฒด๋ ๋ค์ํ ํฌ๊ธฐ์ ํ์
์ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง ์ ์๋ ํ์
์
๋๋ค. ๊ตฌ์กฐ์ฒด๋ **ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ๋ฉค๋ฒ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ง์ถ๋ค.** ์ด๋ ์๊ธฐ๋ ํจ๋ฉ์ ๋ฐ์ดํธ ํจ๋ฉ์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ ์ถ๊ฐ๋๋ ๋ฐ์ดํธ๋ฅผ ํจ๋ฉ ๋ฐ์ดํธ(padding byte)๋ผ๊ณ ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ท์น
1. ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋นํจ
2. ๊ฐ์ฅ ์์ ๋ณ์๋ถํฐ ์ฐ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฑ์, ๋ง์ฝ ํ์ฌ ๋จ์ ๋ฉ๋ชจ๋ฆฌํฌ๊ธฐ๋ณด๋ค ํ์
์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ์ถ๊ฐ์ ์ผ๋ก ํ ๋นํ๊ณ , ๊ธฐ์กด์ ๋จ์ ํฌ๊ธฐ๋ฅผ ํจ๋ฉ์ผ๋ก ์ฑ์๋ฃ์
**๊ณต์ฉ์ฒด**
๊ณต์ฉ์ฒด(union)๋ union ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ๋๋ค์๋ ๊ตฌ์กฐ์ฒด์ ๊ฐ์ต๋๋ค. ํ์ง๋ง **๋ชจ๋ ๋ฉค๋ฒ ๋ณ์๊ฐ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ **ํ๋ค๋ ์ ๋ง์ด ๋ค๋ฅด๋ค. **ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ๋ณ์์ ํฌ๊ธฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น**๋ฐ์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฉค๋ฒ ๋ณ์ ํ๋๋ง์ ์์ ํด๋ ๋ค๋ฅธ ๊ฐ๋ค ๋ํ ๋ณ๊ฒฝ๋ ์ ์๋ค.
``
์ ์ฝ๋์์ **`a`**์ ๊ฐ์ **`0x78`**์ด ๋ ๊ฒ์ด๋ฉฐ, **`b`**์ ๊ฐ์ **`0x5678`**์ด ๋ ๊ฒ์
๋๋ค. ๋ฐ๋๋ก ๋น
์๋์ ์์คํ
์์๋ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅผ ์ ์๋ค.
### ๋ฐ์ดํฐ ์ ์ฅ๋ฐฉ์
ex) `0x12345678`
๋๊ฐ๋ก ๋์ ๊ฒ์ ํ๋์ ์ฃผ์๋ ์ฃผ๋ก ๋ฐ์ดํธ ๋จ์์ด๊ธฐ ๋๋ฌธ
- **๋ฆฌํ์ธ๋์**: ๋ฎ์ ์ฃผ์์, ํ์ ๋นํธ๊ฐ ๋ฃ์ด์ง(์ฆ ์ฃผ์ ์์ผ๋ก ํํํ๋ฉด 78,56,34,12)
- ๋น
์ธ๋์: ๋ฎ์ ์ฃผ์์, ์์ ๋นํธ๊ฐ ๋ฃ์ด์ง(12,34,56,78)
๋ฆฌํ ์๋์ ๋ฐฉ์์ ๋ฎ์ ์ฃผ์์ ๋ฐ์ดํฐ์ ๋ฎ์ ๋ฐ์ดํธ(LSB : Least Significant Byte)๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ํ์ ์ฌ๋์ด ์ซ์๋ฅผ ์ฌ์ฉํ๋ ์ ํ ๋ฐฉ์๊ณผ ๋ฐ๋๋ก ๊ฑฐ๊พธ๋ก ์ฝ์ด์ผ ํ๋ค.
[](https://cdn.jsdelivr.net/gh/han-0315/han-0315.github.io@main/assets/img/post/Cpp%EC%A0%95%EB%A6%AC/Untitled.png)
\[์ถ์ฒ: ์ํคํผ๋์, https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8\]
### ์์
#### ์ ๊ทผ์ ์ด
ํด๋์ค์์ ์ ๊ทผ ์ ์ด ๋ฐฉ์์ public, private, protected 3๊ฐ์ง๊ฐ ์๋ค.
- `public`: ์ ์ฒด ์ ๊ทผ ๊ฐ๋ฅ
- `private`: **ํด๋์ค ๋ด๋ถ์์๋ง ๊ฐ๋ฅ, ์ ๊ทผ์ ์ด ํค์๋๊ฐ ์์ผ๋ฉด private๊ฐ ๊ธฐ๋ณธ๊ฐ**
- `protected`: **์์๋ฐ์ โํ์โํด๋์ค, ์์ ์ ํด๋์ค ๋ด๋ถ์์๋ง ๊ฐ๋ฅ**
- `friend`
- friend ํด๋์ค๋ friend๋ก ์ ์ธ๋ ๋ค๋ฅธ ํด๋์ค์ private ๋ฐ protected ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค.
- friend ํจ์๋ private ๋ฐ protected ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค.
#### ์ค๋ฒ๋ก๋ฉ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ
์ค๋ฒ๋ผ์ด๋ฉ์ ๋์ ์ผ๋ก ์ค์ ๊ทธ ๊ฐ์ฒด์ ํ์
์ ๋ง๋ ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ด๊ณ , ์ค๋ฒ๋ก๋ฉ์ ์ ์ ์ผ๋ก ๋งค๊ฐ๋ณ์์ ๋ง๋ ํจ์๋ฅผ ์ ํํ์ฌ ์คํํ๋ ๊ฒ์ด๋ค.
#### virtual์ด๋?
**`virtual`**์ C++์ ๋คํ์ฑ์ ๊ตฌํํ๊ธฐ ์ํ ํค์๋๋ก **abstract method**์ด๋ค. ์ด๋ฅผ ํตํด ํ์ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ๋ ์ ์๋ค.
virtual ํจ์๋ฅผ ํธ์ถํ๋ฉด, ์ปดํ์ผ๋ฌ๋ ๊ฐ์ฒด์ ํ์
์ด ์๋ ์ฐธ์กฐ๋ฅผ ํตํด ๊ฐ๋ฆฌํค๋ **์ค์ ๊ฐ์ฒด์ ํ์
์ ํ์ธ**ํ์ฌ ์ ์ ํ ํจ์๋ฅผ ํธ์ถํ๋ค. ๋ด๋ถ์ ์ผ๋ก๋ **๊ฐ์ ํจ์ ํ
์ด๋ธ**์ ์ฌ์ฉํ์ฌ, ํ์ฌ์ ํ์
์ด ์๋ ์ค์ฒด๋ฅผ ๋งตํํ๋ค. ์๋์ ์ฝ๋์์ **(1)**์ ๊ฒฝ์ฐ์์ Base ํ์
์ ํจ์๊ฐ ์๋ ์ค์ฒด์ ํจ์ Derived show, display๋ฅผ ๋งตํํ๋ค.
``
#### ์
์บ์คํ
๊ณผ ๋ค์ด์บ์คํ
์
์บ์คํ
= ํ์ ํ์
์์ ์์ ํ์
์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด๋ค. ๋ค์ด ์บ์คํ
์ ๋ฐ๋๋ก ์์์์ ํ์๋ก ์ฐธ์กฐํ๋ค. ์
์บ์คํ
์ ์์ ํ๋, ๋ค์ด์บ์คํ
์ ๋ถ์์ ํ๋ค. ํ ๊ฒ์ด๋ผ๋ ์์ํ์
์์ ์๋์ฐจ๋ผ๋ ํ์ํ์
์ผ๋ก ์บ์คํ
ํ๋ฉด, ๋ง์ฝ ์ค์ฒด๊ฐ ๋นํ๊ธฐ๋ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
``
### String
C++์ **`std::string`** ํด๋์ค์ C ์คํ์ผ ์คํธ๋ง ๊ฐ์ ์ฃผ์ ์ฐจ์ด์ ์ ์๋์ ๊ฐ๋ค.
- **C ์คํ์ผ ์คํธ๋ง**: ๋ฌธ์๋ค์ ๋ฐฐ์ด๋ก, ๋(**`'\0'`**) ๋ฌธ์๋ก ์ข
๋ฃ๋๋ค. ์: **`char myStr[] = "Hello";`** ๋ง์ง๋ง ๋ฌธ์์ด์ ๋ ๋ฌธ์๊ฐ ์
๋ ฅ๋๋ค.
- **std::string**: C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค๋ก์, ๋ฌธ์๋ค์ ๋์ ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ค๋ก ๊ตฌ์ฑ๋๋ค.
- ํฌ๊ธฐ์กฐ์ : C์คํ์ผ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, C++ ์คํ์ผ์ ๊ฐ๋ฅํ๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
``
### ์ธ๋ผ์ธ ํจ์
์์ ๊ฐ์ด **C++์์ ํจ์์ ํธ์ถ**์ ๊ฝค ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก, ์ฝ๊ฐ์ **์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ** ๋ฉ๋๋ค. ํ์ง๋ง ํจ์์ ์คํ ์๊ฐ์ด ๋งค์ฐ ์งง๋ค๋ฉด, ํจ์ ํธ์ถ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ๋ถ๋ด์ด ๋ ์ ์๋ค.
์ธ๋ผ์ธ **ํจ์๋ ํธ์ถ๋ ๋ ์ผ๋ฐ์ ์ธ ํจ์์ ํธ์ถ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ **, ํจ์์ ๋ชจ๋ ์ฝ๋๋ฅผ **ํธ์ถ๋ ์๋ฆฌ์ ๋ฐ๋ก ์ฝ์
ํ๋ ๋ฐฉ์์ ํจ์์ด๋ค.** ์ด ๋ฐฉ์์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐ **๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ์ฝ๋๋,** ์ฌ๊ท์ ๊ฐ์ ํจ์์ ์ฌ๋ฌ ์ด์ ์ ์ฌ์ฉํ ์ ์๋ค.
์ธ๋ผ์ธ ํจ์ ์ฌ์ฉ์ ๋จ์ ์ ์ปดํ์ผ ์๊ฐ(์ธ๋ผ์ธ ํจ์ ์นํ) ์ฆ๊ฐ, ๋๋ฒ๊น
์๊ฐ ์ฆ๊ฐ, ์ฌ๊ท ๋ถ๊ฐ๋ฅ์ด ์๋ค.
### ํจ์ ํฌ์ธํฐ
ํจ์ ํฌ์ธํฐ๋ ๋ง ๊ทธ๋๋ก ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ค. ํ๋ก๊ทธ๋จ์์ ์ ์๋ ํจ์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋ชจ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ฉฐ ํจ์ ํฌ์ธํฐ๋ ํจ์์ ์ฒซ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
``
### STL
[STL ์ปจํ
์ด๋ ์ ๋ฆฌ](https://www.notion.so/e5467d68109844ed98daddee9c4b577a)
### ๊ทธ์ธ
`volatile` ํค์๋๋ฅผ ํตํด ์ปดํ์ผ๋ฌ์๊ฒ ์ต์ ํ๋ฅผ ์ ํํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. voliatile๋ก ์ ์ธํ ๋ณ์๋ ์ปดํ์ผ๋ฌ๊ฐ ํด๋น ๋ณ์๋ฅผ ์ต์ ํ์์ ์ ์ธํ์ฌ ํญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋๋ก ํ๋ ํค์๋์
๋๋ค.
์๋์ ๊ฐ์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ๋๋ฒ์งธ ์ฝ๋๋ก ํด์ํ์ฌ ์ต์ ํํ๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด `volatile` ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
**\[๊ธฐ์กด ์ฝ๋\]**
``
**\[์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํํ ์ฝ๋\]**
``
### ์ด๊ธฐํ
์ด๊ฑฐ๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ค๊ฐ ๋ฐ๊ฒฌํ ๊ฒ์ด๋ค. ๊ฒ์ ํ์ฌ ๋ฉด์ ์์ ์๋์ ๊ฐ์ด ์ด๊ธฐํ ๋ฐฉ๋ฒ์ ๋ฌผ์ด๋ดค๋ค๊ณ ํ๋ค. ๋ชฐ๋๋ ์ฌ์ค์ธ๋ฐ ์๋์ ์ด๊ธฐํ๋ฅผ ์งํํ๋ฉด ์ฐ์ฐ์ด ํ๋๋ก ์ค์ด๋ ๋ค๊ณ ํ๋ค.
- ์์ฑํ ์ด๊ธฐํ
``
- ์์ฑ์ ์ด๊ธฐํ
``
์์ฑํ ์ด๊ธฐํ๊ฐ ํ๋ฒ์ ์งํํ๊ณ , ์์ฑ์ ์ด๊ธฐํ๋ ํ๋ฒ์ ์ฐ์ฐ๊ณผ์ ์ด ๋ ํ์ํ๋ ๋น์ฉ์ด 2๋ฐฐ๋ผ๊ณ ํ๋ค.
### ์ฐธ๊ณ ์๋ฃ
<https://tcpschool.com/c/c_intro_programming>
<https://velog.io/@mardi2020/C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC>
<https://se-jung-h.tistory.com/entry/C-C-%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8>
<https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS1726560277&cate_cd=>
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด](https://www.handongbee.com/categories/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4/), [Cpp](https://www.handongbee.com/categories/cpp/)
[Cpp](https://www.handongbee.com/tags/cpp/) [C++](https://www.handongbee.com/tags/c/)
This post is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) by the author.
Share
## Trending Tags
[Network](https://www.handongbee.com/tags/network/) [CloudNet](https://www.handongbee.com/tags/cloudnet/) [Kubernetes](https://www.handongbee.com/tags/kubernetes/) [KANS](https://www.handongbee.com/tags/kans/) [KANS\#1](https://www.handongbee.com/tags/kans-1/) [Cilium](https://www.handongbee.com/tags/cilium/) [CNI](https://www.handongbee.com/tags/cni/) [KANS\#3](https://www.handongbee.com/tags/kans-3/) [KANS\#8](https://www.handongbee.com/tags/kans-8/) [KANS\#2](https://www.handongbee.com/tags/kans-2/)
## Contents
[์ด๊ฑฐํ๋๋ก GitHub Blog ๋ง๋ค๊ธฐ](https://www.handongbee.com/posts/GitHub-Blog-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0/)
[OS ์ค์ผ์ค๋ง](https://www.handongbee.com/posts/%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81/)
ยฉ 2025 [Dongbee](https://www.handongbee.com/posts/Cpp%EC%A0%95%EB%A6%AC/). Some rights reserved.
Using the [Chirpy](https://github.com/cotes2020/jekyll-theme-chirpy) theme for [Jekyll](https://jekyllrb.com/).
## Trending Tags
[Network](https://www.handongbee.com/tags/network/) [CloudNet](https://www.handongbee.com/tags/cloudnet/) [Kubernetes](https://www.handongbee.com/tags/kubernetes/) [KANS](https://www.handongbee.com/tags/kans/) [KANS\#1](https://www.handongbee.com/tags/kans-1/) [Cilium](https://www.handongbee.com/tags/cilium/) [CNI](https://www.handongbee.com/tags/cni/) [KANS\#3](https://www.handongbee.com/tags/kans-3/) [KANS\#8](https://www.handongbee.com/tags/kans-8/) [KANS\#2](https://www.handongbee.com/tags/kans-2/)
A new version of content is available.
Update |
| Readable Markdown | null |
| Shard | 156 (laksa) |
| Root Hash | 9508965561947048356 |
| Unparsed URL | com,handongbee!www,/posts/Cpp%EC%A0%95%EB%A6%AC/ s443 |