본문 바로가기

[ C++ ]84

C++ [방향키입력, 커서이동] ▣ 안녕하세요. 이번장에서는 방향키를 눌러 문자를 이동시키는 코드를 공부해보도록 하겠습니다. ▣ 우선 방향키를 입력받는 코드를 작성해보겠습니다. #incldue 를 선언해주세요. 이건 _getch()를 사용하기 위함입니다. scanf()와 다르게 입력 버퍼에 저장하지 않고 바로 아스키코드로 반환해주는 함수입니다. 그리고 엔터를 누를 때까지 기다리지 않습니다. 이렇게 코드를 작성하고 방향키를 누르게 되면 224 72, 224 80, 224 77, 224 75 이렇게 두 가지 숫자들이 출력되는 걸 확인할 수 있습니다. 방향키는 복합키워드를 가지고 있기 때문에 두 가지 숫자를 조합해서 반환합니다. 그럼 여기서 우리가 알 수 있는건, 방향키를 입력했을때에는 공통적으로 224를 준다라는 사실입니다. ▣ 그럼 이걸.. 2022. 2. 22.
C++ [NULL, 0, nullptr, 초기화, 함수오버로딩] ▣ 안녕하세요. 이번장에서 데이터를 초기화하는 NULL, 0, nullptr에 차이를 공부해 보겠습니다. ▣ 우선 똑같은 이름에 두 개에 함수를 선언하겠습니다. 그리고 한개는 int num 정수에 값을 받는 매개변수로 한 개는 int *num 주소를 입력받는 포인터로 각각 선언을 합니다. 그런 다음 메인 함수에서 testFunce() 함수를 호출합니다. 첫번째 testFunce(0) 정수 값을 0으로 매개변수에 값을 전달해줍니다. 그럼 함수 오버 로딩을 하면 두 함수 중에 정수에 매개변수를 가지고 있는 함수를 호출하고 값을 전달하는걸 확인할 수 있습니다. ▣ 이번에는 매개변수에 NULL을 전달해줍니다. 디버그를 해보면 아까와 동일하게 정수형 매개변수를 가지고 있는 함수를 호출하는 걸 확인할 수 있습니다... 2022. 2. 4.
C++ [ctype, is키워드, 종류 판단함수] ▣ 안녕하세요. 이번장에서 ctype.h에 있는 문자의 종류를 판단하는 함수를 공부해보겠습니다. ▣ 우선 #include 헤더를 추가합니다. 헤더 이름 앞부분에 c를 붙이면 c언어에서 사용한 헤더라고 생각하시면 됩니다. cin.get(str) 함수를 사용하여 문자를 입력받습니다. 그리고 밑에 cin.get() 쓰는 이유는 버퍼에 남아 있는 \n 엔터를 지우기 위함입니다. 저게 없으면 계속 입력을 받을때 엔터가 버퍼에 남아있어 두 번 입력을 받는 게 됩니다. ▣ if문 조건문 안에 isalnum, isalpha, isblank함수를 넣어 10진수라면, 알파벳이라면, 스페이스나 탭이라면 반환형을 1 또는 0으로 주기 때문에 이렇게 결과가 나옵니다. 꼭 직접 확인해보세요. ▣ 그리고 islower, isupp.. 2021. 12. 1.
C++ [논리연산자, and, or, not] ▣ 이번장에서는 논리 연산자를 간단하게 공부해보도록 하겠습니다. C언어에서는 논리연산자를 &&, ||,! 기호로 사용했습니다. 하지만 이건 큰 문제가 될 수 있습니다. 왜냐하면 세계 모든 키보드자판에 형식이 같지 않기 때문에, &, |, ! 을 지원하지 않는 키보드가 있을 수 있습니다. 그렇기 때문에 C++에서는 &&, ||,! 논리 연산자를 다르게 사용합니다. ▣ && 연산자는 and로 || 연산자는 or로 ! 연산자는 not으로 합니다. ▣ 이렇게 and or 모두 값을 확인해보세요. 이제 입력을 받아서 조건문에 논리연산자를 모두 사용해서 만들어보세요. 2021. 11. 24.
C++ [형변환, 상수, 매크로, casting] ▣ 안녕하세요. 이번장에서는 형 변환(casting) 그리고 상수에 대해 공부해보도록 하겠습니다. ▣ char 형으로 x 라는 변수를 'A' 문자 값을 넣고 정의합니다. 그리고 cout 으로 x를 출력했을 경우 (int) x, int(x)를 출력한 걸 확인해보겠습니다. 그럼 x는 문자 그대로 A가 출력되고 casting 한 두 변수는 65 아스키코드 숫자 값이 나오는 걸 확인할 수 있습니다. C언어에서와 동일하게 강제형변환을 하려면 (int)를 사용하여 진행했지만 C++에서는 int() 조금더 직관적으로 코드를 작성할 수 있습니다. ▣ 이렇게 float형식을 int() 형으로 강제 형변환(casting)하여 출력하면 바뀌는 걸 확인할 수 있습니다. ▣ 이번에는 매크로와 상수를 만드는 방법을 간단하게 해보.. 2021. 10. 22.
C++ [bool, 데이터자료형] ▣ 안녕하세요. 이번장에서는 C++에서의 bool 자료형에 대해 공부해보도록 하겠습니다. ▣ bool 자료형은 변수의 자료형들 중에 하나입니다. int 형은 정수형, float 형은 실수형 이런 식으로 자료형이 있듯이 bool 형은 true(1), false(0)를 저장하는 형식에 자료형이라고 생각하시면 됩니다. ▣ 변수를 선언할 때 bool 자료형으로 지정을 하고 값을 true, false로 각각 대입을 하고 출력을 해보겠습니다. 그러면 1과 0이 출력되는 걸 확인할 수 있습니다. ▣ 그럼 1과 0이 아닌 true와 false 값을 출력하는 코드를 진행해보겠습니다. 그러기 위해서는 cout으로 boolalpha로 코드를 작성한 후에 bool 값이 있는 변수를 출력합니다. 그러면 true, false값으.. 2021. 10. 21.
C++ [cmath, algorithm, 수학함수] ▣ 안녕하세요. 이번장에서 수학를 계산하는 함수를 간단하게 공부해보겠습니다. ▣ 수학함수를 사용하기 위해선 c언어에서 다르게 를 사용합니다. c언어 헤더와 c++ 헤더를 구분하기 위함도 있지만 cmath 가 더 기능이 있습니다. 그리고 숫자를 입력받을 변수와 제곱근을 계산해서 반환한 값을 저장할 변수를 선언하고, sqrt()함수를 입력합니다. 그럼 이렇게 double 형으로 반환되고 매개변수값을 (double)형식으로 넣으라는 표시가 나옵니다. ▣ 함수에 양식대로 넣어서 출력을 해보면 81을 입력하면 81에 제곱근이 9라는걸 확인할 수 있습니다. ▣ 헤더를 추가하여 min(), max()함수를 사용해보겠습니다. 함수에 이름처럼 최소값 최대값을 구해주는 함수이고 ceil(), floor() 올림, 내림을 .. 2021. 10. 20.
C++ [파일입출력] ▣ 이번장에서는 C++에 파일 입출력을 진행해보도록 하겠습니다. ▣ 먼저 파일입출력을 사용하기 위해서 #include 헤더를 추가해야 합니다. 그리고 ofstream, ifstream를 사용하여 파일을 열어야합니다. ofstream는 쓰기 모드 ifstream은 읽기 모드로 각각 파일을 열어주세요 그리고 디버그를 해보고 프로젝트 파일 안을 확인하면 ▣ 이렇게 ofstream 파일을 열었던 파일이 생성된 걸 확인할 수 있습니다. 그럼 이번에는 ofstream으로 만든 텍스트 파일에 글을 작성해보겠습니다. ▣ ofstream 클래스로 파일을 쓰기 모드를 열고 outfile 2021. 10. 15.
C++ [템플릿_01, template, typename] ▣ 안녕하세요. 이번장에서 템플릿을 공부해보도록 하겠습니다. 우선 필요성에 대해서 생각해보겠습니다. ▣ 우리가 함수 오버 로딩을 공부했습니다. 함수 이름을 동일하게 사용하는 걸 이야기하는데, 이는 자료형이나 매개변수에 수가 다르면 사용할 수 있습니다. sum라는 함수에 하나는 int형으로 하나는 double형으로 반환형을 지정했습니다. ▣ 그리고 main() 함수에서 sum(10, 20), sum(1.4, 4.5)를 각각 출력해보면 매개변수에 값에 자료형에 따라 함수 오버 로딩으로 값이 출력되는 걸 확인할 수 있습니다. 하지만 함수이름이 같기 때문에 반환형에 자료형과 매개변수에 자료형이 어떻게 지정되어 있는지 우리는 알기가 어렵습니다. 직접 코드를 보는 방법도 있지만, 그렇지 못할 경우 반환형이 정수형인.. 2021. 8. 19.
C++ [매크로, inline, #define] ▣ 안녕하세요. 이번장에서는 C++에서 매크로와 인라인을 공부해보겠습니다. 매크로는 우리는 C언어에서 #define으로 정의를 하는 부분과 동일합니다. #define PI 3.1412 이렇게 main함수 밖에서 #include와 함께 적었던 코드 기억하시죠. 그럼 PI라는 상수 기호가 3.1412 값으로 정의가 되는 걸 했던 기억을 있을 겁니다. #은 전처리기고 컴파일하기전에 처리해주는 걸 의미합니다. 그렇기 때문에 int PI = 3.1412 이렇게 선언 및 정의를 해준 것보다 과정에서도 컴파일 전에 하기 때문에 적겠죠? 이 부분을 기억하시고 이제 매크로를 활용하여 함수를 정의해보겠습니다. ▣ 매크로 함수를 정의하려면 함수를 정의하는 것과 거의 동일합니다. 함수 이름 앞에 #define을 붙어주시고 S.. 2021. 7. 30.
C++ [레퍼런스변수, 포인터, 주소, 참조] ▣ 안녕하세요 이번장에서는 포인터를 꼭 공부하고 진행해주세요. 메모리 주소에 대한 개념이 없으면 어렵습니다. ▣ 첫번째는 포인터를 이용해서 변수에 값을 바꿔보도록 하겠습니다. int num = 10; 변수를 정의하고 int *으로 int에 주소를 저장하는 pNum를 주소를 선언해줍니다. 그리고 &num에 주소를 대입해서 넣어주세요 그리고 값과 주소를 출력하는 코드를 넣고 *pNum 포인터로 간접으로 접근해서 20으로 대입을 해주고 출력을 하면 주소가 동일한걸 확인할 수 있고, 값이 바뀐 것도 확인할 수 있습니다. ▣ 이부분을 C++에서는 더 직관적으로 사용하게 만든 게 레퍼런스 변수, 참조 변수입니다. ▣ 이번에는 C++에 레퍼런스변수로 주소를 저장해서 값을 바꿔보겠습니다. 쉽게 정의를 해보겠습니다. 포.. 2021. 7. 23.
C++ [클래스_02, Class, get, set, 함수, 멤버함수, 멤버변수] ▣ 안녕하세요. 이번장에서는 저번장에 이이서 클래스에 get, set 함수를 만들어보도록 하겠습니다. 결론부터 이야기하면 get, set을 만드는 이유는 간단하게 이야기해서 클래스에 있는 멤버 변수를 접근하게 아니면 접근하지 못하게 구분하기 위한 함수라고 생각하시면 됩니다. 코드를 입력하면서 이야기를 이어가도록 하겠습니다. ▣ 저번장에서 공부했던 클래스 코드를 먼저 살펴보겠습니다. 클래스 멤버 함수 안에 조건문을 넣어서 잘못된 값을 멤버 변수에 대입하지 못하게 조건문을 넣은 코드입니다. 하지만 이 부분이 있더라도 game1.gameNumber = 10처럼 직접 멤버변수에 접근해서 대입을 하게 되면 무용지물이 되게 됩니다. 누구든 아무렇게나 멤버 변수를 접근할 수 있기 때문입니다. ▣ private 으로 .. 2021. 7. 21.
C++ [클래스_01, Class, 객체, 멤버변수, 멤버함수, 접근지정자] ▣ 안녕하세요. 이번장에서는 클래스를 공부해보겠습니다. 클래스는 C언어에 구조체 형식과 매우 비슷합니다. 쉽게 이야기해서 구조체 또한 변수, 배열, 함수를 구조화시켜서 한꺼번에 관리하기 위해 만든 구조입니다. 즉 클래스는 메모리를 하나에 객체화로 구조화 시켜 관리하기 위함입니다. 이해를 돕기 위해 코드를 하나하나 작성하면서 공부해보겠습니다. ▣ 클래스는 선언하려면 C언어에서의 struct 구조체와 동일하게 class 키워드로 선언을 합니다. 자료형 타입이라고 생각하시면 편하실 겁니다. class를 작성한 다음 옆에 클래스에 이름을 치고 {} 괄호로 클래스에 범위를 지정해주세요. 구조체와 함수에 형식과 동일합니다. 그런 다음 public: 접근지정자로 외부에서 접근할 수 있게 지정을 해줍니다. 이게 있어야.. 2021. 7. 20.
C++ [namespace, 네임스페이스] ▣ 안녕하세요 이번장에서는 네임스페이스를 공부해보겠습니다. 네임스페이스는 쉽게 정의하면 동일한 이름으로 변수나 함수, 배열 등을 사용할 때 소속을 지정해 그걸 구분하기 위한 키워드라고 생각하시면 됩니다. 그럼 간단한 코드를 통해서 하나하나 공부해보겠습니다. ▣ 공부하기 전에 꼭 전역 변수, 지역변수를 공부하고 시작해주세요. ▣ num이라는 변수를 두가지 형식으로 정의했습니다. 하나는 전역변수 하나는 지역변수입니다. main에서 같은 이름에 num을 출력해보면 지역변수를 출력하는 걸 확인할 수 있습니다. 다시 말해 함수 안에 있는 지역변수가 우선순위로 접근한다라는 걸 확인할 수 있습니다. 그럼 전역변수를 접근하려면 어떻게 해야 할까요 ▣ :: 연산자를 사용하여 ::num을 하게 되면 전역 변수를 접근하게 .. 2021. 7. 16.
C++ [디폴트 매개변수] ▣ 디폴트 매개변수는 간단합니다. 함수에 매개변수에 초기값을 지정해주는 게 디폴트 매개변수라고 생각하시면 됩니다. ▣ function(int num1 = 1)을 해주시면 매개변수 기본값이 지정하게 되는데 여기서 중요한 부분은 호출을 하는 호출자가 값을 전달해주냐 주지 않느냐에 따라 달라집니다. function() 함수를 그냥 호출했을 때와 153, 39처럼 값을 전달해줄 때에 출력 결과가 다른 걸 볼 수 있습니다. 그냥 호출해주었을때 1이 출력되는 걸 확인할 수 있고, 값을 전달해준 호출은 그 값이 출력되는 걸 확인할 수 있습니다. 즉 우선순위는 호출자가 전달해주는 값입니다. ▣ 이번에는 여러개에 매개변수를 받아 호출해보겠습니다. 이번에는 num1, num2, num3 이렇게 3개에 매개변수로 값을 받아.. 2021. 7. 13.
C++ [for문, 포인터, 레퍼런스변수] ▣ C언어에 for문 형식입니다. (초기식, 조건, 증감) 이렇게 for문 함수 형식으로 C++에서 사용할 수 있습니다. 그리고 C++에서의 for문 스타일도 존재합니다. ▣ for( 변수 : 범위 ) 에 형식으로 for문을 작성할 수 있습니다. 그럼 범위에 넣었던 aList에 하나하나에 요소에 값을 변수에 하나씩 대입을 합니다. 그리고 그 범위가 끝날때까지 반복을 하는 형식입니다. ▣ 이번에는 for문을 이용하여 배열에 값들에 +1씩을 더하는 코드를 작성해보겠습니다. 하나하나 요소를 접근하여 i++를 하고 다시 for문을 활용하여 출력을 해보면 값이 하나도 안바뀌어 있는걸 확인할 수 있습니다. ▣ 우리가 여기서 생각해야할 부분은 for에 있는 (int i입니다. for() 이렇게 괄호가 있으면 함수이기.. 2021. 7. 9.
C++ [함수 오버로딩] ▣ C언어에서는 똑같은 이름에 함수를 선언하고 정의해서 사용하게 되면 컴파일 오류가 나오게 됩니다. 하지만 C++에서는 이 부분을 함수 오버 로딩을 통해 여러 함수를 같은 이름으로 사용할 수 있습니다. ▣ 전에 C언어 코드를 .cpp소스 코드 파일을 만들어 코드를 작성해보겠습니다. C++에서 sum이라는 이름에 함수를 두 가지를 선언했습니다. 함수 오버로딩을 하는 방법은 아주 간단합니다. 위에 코드처럼 함수에 매개변수에 변수에 갯수가 다르거나, ▣ 매개변수에 변수에 갯수가 같더라도 자료형이 다르면 같은 이름에 함수를 사용할 수 있습니다. 이게 함수 오버로딩입니다. 2021. 7. 2.
C++ [구조체 함수 사용] ▣ 먼저 C언어와 동일하게 구조체를 선언해줍니다. typedef는 struch My_Game을 하나에 별칭으로 지정하기 위함이니다. MyGame;으로 지정하면 main함수에서 struch My_Game 이렇게 작성하지 않아도 MyGame mygame 이렇게 선언할 수 있습니다. ▣ 그리고 더하기를 함수를 만들어주시고 main함수에서 mygame.sum = Calculator(mygame.number1, mygame.number2); 로 함수에 우리가 초기값으로 지정한 값을 주고 반환값을 sum에 넣어주고 출력을 하면 값이 잘 나오는걸 확인할 수 있습니다. 2021. 6. 8.
C++ [문자열, string, 문자열 함수] ▣ 문자열을 다뤄보겠습니다. 우선 string 클래스는 사용하기 위해서는 #include 를 선언해줘야 합니다. 보통 C언어에서는 문자열을 다루기 위해서는 char name []에서 처럼 char 하나에 문자를 여러 개 저장하기 위한 배열을 필요합니다. 하지만 C++에서는 string 클래스는 통해 문자열을 char 하나하나가 아닌 string 자료형 형식으로 하나에 클래스로 사용할 수 있습니다. string name1을 선언하고 name1에 문자열을 정의한 다음에 출력을 해보면 배열과 동일하게 문자열이 잘 출력되는 걸 확인할 수 있습니다. ▣ 이번에는 문자열을 입력받겠습니다. 우리는 입력을 받을 때에는 std::에 있는 cin을 사용했습니다. 하지만 cin 같은 경우 한 단어 단위로 입력을 받습니다. .. 2021. 5. 31.
C++ [메모리 할당, new, delete] ▣ 이번장에서는 c++에서 메모리 할당하는 코드를 공부해보겠습니다. c언어에서 malloc()함수와 free() 함수를 모르시는 분은 c언어 코드 예제를 참고해주세요. ▣ 우리가 힙영역에서 메모리를 직접 할당하려면 우선 int *p 포인터를 사용해야 합니다. 포인터는 주소를 저장하는 변수입니다. 그리고 내가 원하는 크기만큼 메모리를 할당하려면 c언어에서는 int *p = malloc(크기)로 할당해서 사용했습니다. 하지만 c++에서는 더 직관적으로 간결하게 new 키워드를 사용하여 할당합니다. int *p = new int; 이렇게 하게 되면 int 크기로 4byte를 할당할 수 있습니다. ▣ 그렇게 하고 cout으로 sizeof() 함수를 이용하여 메모리에 크기와 주소 그리고 값을 출력하면 우리가 할당.. 2021. 5. 23.
C++ [출력, 입력] ▣ 먼저 입출력을 사용하기 위해서는 #전처리기로 선언을 해줘야합니다. #include 표준입출력을 하기 위한 헤더파일을 선언했습니다. 그리고 main 함수에 std:: 를 넣어주세요 이건 std::라는 클래스에 접근한다라고 생각하시면 됩니다. cout은 c는 콘솔, out은 output을 생각하시면 됩니다. x >> y; 두개를 입력받기 위해 x, y를 넣어주세요. 그리고 입력을 해주시면 되는데, 여기서 중요한건 >> x >> y는 띄어쓰기를 기준으로 두개에 정수를 입력받는다라는 것 기억해주세요. ▣ 또한 C언어에서처럼 scanf함수로 입력 받을 수도 있습니다. 이렇게 띄어쓰기 기준으로 입력을 받습니다. 여기서 scanf에 _s 를 붙이는 이유가 궁금하시다면 c언어 공부에 입력부분을 참고해주세요. ▣ 또.. 2021. 5. 21.