반응형

C++ 39

[카루의 C++ 강좌] 3-2. 조건문과 if ~ else if ~ else

오늘은 조건문을 배워보겠습니다. 예전에 배웠던 삼항 조건 연산자 기억하시나요? 그 연산자가 블록이 되었다고 보시면 쉽습니다. (조건식) ? (참일 때 실행할 식) : (거짓일 때 실행할 식); 자세히 보시면 실행할 '식'이라고 써 있습니다. 즉, 무언가 값을 반환하는 식만 가능합니다. 문장은 쓸 수 없다는 뜻이죠. 저 식에는 void가 아닌 함수 호출, 수식, 또는 변수나 상수 그 자체만 쓸 수 있습니다. return문 등은 쓸 수 없습니다. 그리고 무엇보다 여러 문장을 쓸 수 없다는 게 단점이죠. ​ 이걸 if~else 문으로 바꾸어보겠습니다. if (조건식) { // 참일 때 실행할 '문장' } else { // 거짓일 때 실행할 '문장' } 위와 같이 표현할 수 있습니다. 일단 예제 코드부터 살펴보..

[카루의 C++ 강좌] 3-1. 반복문과 for, while, do~while

드디어 재미있는 시간이 왔습니다. 이제 본격적으로 배열과 논리 연산자를 사용해 볼 겁니다. 반복문은 특정 구문을 여러 번 실행하기 위해서 사용합니다. 예를 들어 1부터 10까지 출력하는 프로그램을 만들 때, int n{1}; std::cout > input[5]; std::cin >> input[6]; std::cin >> input[7]; std::cin >> input[8]; std::cin >> input[9]; 배열 첨자에 숫자 대신 i 를 넣고 for문을 사용하여 위의 열 줄을 단 세 줄로 줄인겁니다. 중간에 오타가 날 일도 없죠. ​ 자 그런데, 이보다 더 편한 방법이 있습니다. 바로 범위 기반 for문입니다. for (auto n : array) 이런 식으로 사용합니다. 여기서 auto에는 ..

[카루의 C++ 강좌] 2-4. 변수의 초기화 I

초기화는 변수에 처음 값을 대입하는 행위라고 했습니다. 초기화를 세분화하면, 값을 통한 초기화, 직접 초기화, 복사 초기화, 리스트 초기화, Aggregate 초기화, 참조 초기화가 있습니다. 어려운 건 아니니 아래만 보시면 금방 이해하실 겁니다. Value initialization (값을 통한 초기화 - C++03부터) 임시 객체를 만들 때에도 사용하는 방법입니다. 임시 객체는 나중에 설명을 할 테니 일단 아래 코드를 봐 주세요. int iVar = int(); double dVar{}; float fVar = float{}; 위 변수들은 모두 기본값으로 초기화됩니다. 값을 지정하려면 소괄호 또는 중괄호 안에 값을 넣으면 됩니다. ​ 변수의 초기화에서 소괄호와 중괄호는 그 역할이 같고, 웬만하면 중괄..

[카루의 C++ 강좌] 2-3. 연산자 II, 연산자 우선순위

저번 시간에 배운 연산자는 복습하셨나요? 이제 더 난이도를 올려보겠습니다. 비트 연산자 우리는 10진법을 기본으로 사용하지만, 컴퓨터는 이진법이 기본인 거 아시죠? 0과 1을 사용하죠. _ _ _ _ _ _ _ _ 이렇게 8칸이 있으면 각 칸에서 1 또는 0을 표현할 수 있습니다. 각 칸을 비트(Bit)라고 하고 8비트가 모인 걸 1바이트(1byte = 1B)라고 합니다. 1바이트, 2바이트, 4바이트 변수가 이런 형식입니다. ​ 각 비트의 자리수는 각각 128/64/32/16 / 8/4/2/1을 나타냅니다. 즉 이진수 0000 0011은 2와 1 자리에 비트가 있으니 2+1 = 3입니다. 이진수 0010 0010은 32와 2 자리에 비트가 있으니 32+2 = 34입니다. ​ unsigned char은 ..

[C++17] 템플릿 인자를 생략한다? Deduction Guide

​1부터 10까지 저장하는 배열을 하나 생성해보죠. int nArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 아니면 간단히 int arr[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // C++11에는 중괄호를 두 번씩 써야 함: {{1, 2, 3 ... 10}} std::array array{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 그런데, 자료형이 모두 int이고 그 개수가 10개라는건 뻔히 알 수 있습니다. 굳이 이 필요할까요? ​ 그래서 C++17에서는 Deduction Guide라는 것을 사용합니다. 만약에, 우리가 어떤 (템플릿) 클래스를 만드는데, 생성자의 매개변수가 문자열일때, char*가 아닌 std::string으로 받..

C++ 2020.03.21

[C++11] 템플릿으로 배열을 함수에 넘기기

C언어에서, 배열을 함수로 전달하려면 어떻게 해야 했죠? 네. 맞습니다. 바로 포인터를 이용하는 것인데요, void func(int arr[], int size); void func(int *arr, int size); 위와 같이 arr은 포인터 (첫번째줄도 사실 포인터입니다) 로 받고, 배열의 크기는 알 수 없으므로 따로 정수형의 size매개변수를 따로 받았죠. 하지만 이 방식에는 단점이 있습니다. 일단 배열의 사이즈를 모르기 때문에 직접 size로 넘겨야하는 게 가장 큰 문제인데요, ​ C++에서는 템플릿을 통해 문제를 해결합니다. template void func(int (&arr)[N]); 다른 타입을 받고 싶다면 int부분을 수정해주면 됩니다. int (&arr)[N]이 생소하실 수 있는데, 하..

C++ 2020.03.21
반응형