본문 바로가기

c++124

C++ 12장 [함수객체] ▣ 안녕하세요. 이번장에서는 함수를 호출할 때 매개변수를 객체로 전달하는 코드를 공부해보도록 하겠습니다. ▣ 클래스의 소멸자와 생성자를 각각 지정해주고 메인 함수에서 객체를 정의한 다음에 디버그를 하면 이렇게 클래스 생성 시 생성자와 소멸자가 호출되는 걸 확인할 수 있습니다. 이번에는 클래스 멤버함수가 아닌 따로 함수를 만들고 그 함수의 매개변수에 클래스 객체를 전달하는 코드를 작성해보겠습니다. ▣ 코드를 작성했다면 이제 코드를 살펴보겠습니다. sum(cal) 코드를 살펴보면 sum()이라는 함수에 매개변수에 cal 클래스 객체를 전달했습니다. 그럼 클래스가 전달됩니다. 여기서 중요한 건 그 클래스의 생성자는 호출되지 않고 소멸자만 호출된걸 확인할 수 있습니다. 그 이유는 전달 받은 원본의 클래스 객체의.. 2022. 11. 3.
C++ 11장 [string] ▣ 안녕하세요. 이번장에서는 string클래스에 대해 공부해보도록 하겠습니다. 문자열은 문자를 여러 개를 관리하는 문자 배열을 의미합니다. 다시 말해 문자를 여러 개 관리하는 메모리를 의미합니다. C언어에서는 char라는 자료형으로 char str [5] 이렇게 문자열을 다뤘습니다. 배열은 처음에 선언할 때 메모리의 크기를 먼저 정하기 때문에 문자열을 저장하고 다루기가 어려웠고 관리하기도 어려움이 많았습니다. 그래서 C++에서는 그점을 개선하기 위해 표준 라이브러리에서 제공하는 클래스, 문자열 객체가 바로 string입니다. string클래스는 문자열의 크기에 맞춰서 메모리 크기를 조절하기 때문에 앞에 이야기한것처럼 메모리의 크기를 지정하고 미리 생각했야 했던 문제들은 쉽게 해결됩니다. 이제 코드를 작성.. 2022. 10. 28.
C++ 10장 [this 포인터] ▣ 안녕하세요. 이번장에서는 this포인터를 공부해보도록 하겠습니다. this 포인터는 말 그대로 포인터를 의미하며 단순한 포인터가 아닌 멤버 함수를 호출한 객체 자신을 가리키는 포인터, 객체 자신에 대한 포인터를 의미합니다. 코드를 작성하며 공부해보도록 하겠습니다. ▣ 기본적인 클래스와 멤버 함수를 만들어주세요. this->n = n;코드를 보시면 이게 무슨 코드이지?라고 생각하실 거라 생각합니다. 이 코드를 해석하면 this(자신의 객체 주소를 의미하고), ->는 주소에 접근하는 연산자입니다. 그리고 = n 은 멤버 함수에 있는 int n 매개변수의 값을 현재 객체에 있는 멤버 변수에 대입을 하라는 의미입니다. 디버그하고 출력을 해보면 각각 객체마다 지정했던 멤버 함수에 값이 출력되는 걸 확인할 수 .. 2022. 10. 27.
C++ 9장 [메모리 할당] ▣ 안녕하세요. 이번장에서는 메모리 할당에 대해 공부해보겠습니다. 메모리 할당은 프로그래밍에서 실행하는 동안 사용할 메모리 공간을 할당(배정, 몫을 나누는 것) 의미합니다. ▣ 그럼 왜 메모리 할당이 필요할까요? 우리가 프로그램을 만들 때 "내가 몇 기가짜리를 만들어야지"라고 계획을 하지 않습니다. 그렇게 계획을 하고 만들더라도 프로그램에 텍스트 입력 수, 이미지나 도형 크기 등등 메모리를 어느 정도 사용할지에 대한 부분을 모두 다 생각하며 제작하는 건 불가능합니다. 그렇기 때문에 프로그램을 만들고 실행 중 내가 필요한 메모리를 할당받고 필요 없을 때 반환하는 메모리 할당을 진행해야 합니다. 그럼 이제 코드를 작성하며 공부하겠습니다. ▣ int* p = (int*) malloc(sizeof(int)) 이.. 2022. 10. 26.
C++ 8장 [포인터 객체] ▣ 안녕하세요. 이번장에서는 포인터로 객체를 다루는 코드를 공부해보도록 하겠습니다. 포인터는 주소를 저장하는 변수입니다. C언어의 포인터의 개념과 동일합니다. 혹시 포인터를 모르시는 분은 C언어 공부에 포인터 부분을 꼭 공부해보세요. 이제 포인터 객체를 코드를 작성하며 공부해보도록 하겠습니다. ▣ 먼저 기본적인 클래스를 생성해주는 코드와 멤버 함수 코드를 작성해주세요. 그리고 메인 함수에서 Calculator num; 로 객체를 선언합니다. 그런 다음에 포인터를 선언합니다. Calculator* p = num(자료형 변수 이름 = 주소)의 형태로 코드를 작성합니다. 변수를 선언하는 코드와 동일합니다. 그리고 포인터를 이용하여 멤버 함수를 호출해보겠습니다. 포인터에 있는 멤버함수를 접근하기 위해서.(점) .. 2022. 10. 20.
C++ 7장 [인라인 함수] ▣ 안녕하세요. 이번장에서는 인라인 함수를 공부해보겠습니다. 인라인 함수는 인라인 함수 호출 시 그 호출한 코드에 인라인 함수 코드 자체가 안으로 들어가는 함수를 의미합니다. ▣ 정리하면 짧은 코드를 함수로 만들면 함수 호출의 오버헤드가 커서 프로그램 실행 시간이 길어집니다. 오버헤드란 프로그램의 실행 흐름에서 나타나는 현상을 이야기하는데 쉽게 이야기하면 메인 함수로 프로그램을 실행 흐름 중에 다른 곳에 떨어진 위치의 함수 코드를 실행시켜야 할 때, 메모리와 시간을 드리게 됩니다. 그걸 오버헤드 현상이라고 합니다. 만약 우리가 짧은 함수를 호출할 때마다 스택 메모리를 할당하고 함수에 따라 여러 가지 연산을 하는 이 과정들로 하여금 많은 메모리와 시간을 들이게 되면 효과적이지 않고 속도가 저하됩니다. 그렇.. 2022. 10. 13.
C++ 6장 [클래스4] ▣ 안녕하세요. 이번장에서는 접근 지정자를 공부해보겠습니다. 우리가 클래스를 공부하면서 C언어의 구조체와 거의 동일하다고 알고 있습니다. 하지만 클래스와 구조체의 가장 큰 차이점은 접근 지정자입니다. 접근 지정자란 객체를 캡슐화하고 외부에서 객체를 접근할 수 있는지에 대한 허용 여부를 지정해주는 키워드입니다. 코드를 작성하며 공부해 보록 하겠습니다. ▣ 먼저 public은 클래스 내외의 모든 함수에 접근 가능 키워드입니다. 그렇기 때문에 cal.number = 30 코드에서처럼 객체를 만들고 멤버 변수에 접근이 가능합니다. 여기서 주의해야 할 점은 꼭 접근 지정자 끝에 : 콜론을 붙여주세요. ▣ private은 클래스 내의 멤버 함수만 접근 가능하고 외부에서는 접근할 수 없습니다. 그래서 cal.numb.. 2022. 10. 12.
C++ 5장 [클래스3] ▣ 안녕하세요. 이번장에서는 클래스 3번째 시간으로 소멸자를 공부해보도록 하겠습니다. ▣ 소멸자는 객체가 소멸되는 시점에서 자동으로 호출되는 클래스 멤버 함수를 의미합니다. 저번장을 이어서 복습하면 생성자는 객체가 생성되었을 때 소멸자는 소멸되었을 때 호출하는 멤버 함수들입니다. 소멸자를 만들려면 클래스 이름 앞에 ~ 기호를 붙여야 합니다. 또 소멸자는 한 개만 존재해야 합니다. 만약 소멸자가 선언되지 않으면 기본 소멸자가 자동으로 생성됩니다. 그리고 소멸자는 리턴 타입이 없습니다. 생성자처럼 반환형이 없다는 의미입니다. 소멸자의 목적은 마무리 작업을 할 때 사용합니다. 그럼 코드를 작성하며 공부해보겠습니다. ▣ 소멸자를 생성하려면 ~Calculator() 코드에서처럼 클래스 앞에 ~ 기호를 넣으시면 됩.. 2022. 10. 7.
C++ 4장 [클래스2] ▣ 안녕하세요. 이번장에서는 클래스에 생성자에 대해 공부해보도록 하겠습니다. 생성자는 클래스가 객체로 생성될 때(정의할 때) 자동으로 실행되는 함수(생성자)라고 생각하시면 됩니다. 생성자는 오직 한 번만 실행합니다. 생성자 함수의 이름은 클래스 이름과 동일하게 작성해야 합니다. 생성자 함수의 반환형(리턴 타입)을 선언하지 않습니다. 단 함수에 매개변수는 넣을 수 있습니다. ▣ 생성자를 쓰는 이유는 객체가 생성될 때 필요한 초기화 작업을 하기 위함입니다. 이제 생성자를 코드로 공부해보겠습니다. ▣ 생성자 함수는 Calculator::Calculator()처럼 클래스와 동일하게 이름을 지정해주면 됩니다. 여기서 중요한 건 일반 함수와 다르게 반환형이 없는 점 주의해주세요. 코드를 다 작성하셨다면 이제 메인 .. 2022. 10. 6.
C++ 3장 [클래스1] ▣ 안녕하세요. 이번장에서는 클래스를 공부해보겠습니다. 클래스에 대한 부분은 내용이 많아서 여러 장으로 진행하도록 하겠습니다. ▣ 클래스란 객체를 정의하는 틀이나 설계도를 이야기합니다. 클래스는 C언어에서 구조체랑 비슷하다고 생각하시면 됩니다. 클래스를 만들어서 정의하면 그게 객체입니다. 객체는 자신만의 교유한 상태 행동을 구성하고 있습니다. 다시 말해 구조체처럼 클래스 안에 멤버 변수와 멤버 함수를 선언할 수 있습니다. 객체의 상태와 행동으로 생각하시면 됩니다. 그럼 코드를 작성하며 클래스를 공부해보겠습니다. ▣ 클래스를 선언하기 위해서는 class 키워드를 사용해야 합니다. 구조체와 동일한 형식으로 class 키워드, 클래스 이름을 지정해주시고 괄호를 이용하여 클래스의 범위를 지정해줍니다. 중요한 건.. 2022. 9. 30.
C++ 2장 [using 지시어] ▣ 안녕하세요. 이번장에서는 using에 대해 공부해보겠습니다. ▣ 먼저 Hello C++, OK를 출력하는 코드를 작성해보겠습니다. 출력하는 코드를 살펴보면 cout앞에 std::라는 네임스페이스(이름공간, 소속)가 있습니다. 불편하다고는 생각할 수 는 없지만, cout라는 출력하는 키워드를 사용할 때 마다 std:: 붙기 때문에 번거롭다는 느낌을 받게 됩니다. 그럴때 지시어인 using 키워드를 사용하면 됩니다. ▣ using namespace std;로 선언하는 코드를 넣어주면 std:: 네임스페이스를 넣지 않고도 cout을 사용할 수 있습니다. using지시어는 std이름 공간에 선언된 모든 이름에 대해 std::를 생략하기 때문입니다. ▣ 그런데 여기서 주의해야 할 건 std::라는 네임스페이스.. 2022. 8. 24.
Visual studio 단축키 안녕하세요. ^^ 비주얼스튜디오를 사용하다가 많이 사용하는 단축키를 모아서 정리해보았습니다. 솔루션 탐색기 열기 Ctrl + Alt + L 코드자동완성 Ctrl + Space 현재 커서 라인 복사해서 아래라인에 붙여넣기 Ctrl+D 현재 커서 라인 잘라내기 Ctrl + X 드래그한 범위 주석처리 Ctrl + K -> Ctrl + C 드래그한 범위 주석해제 Ctrl + K -> Ctrl + U 단어 검색, 찾기 Ctrl + F 2022. 7. 28.
C++ 1장 [출력, 네임스페이스] ▣ 안녕하세요. C++ 첫 번째 장입니다. C++을 하기 전에 C언어 공부를 꼭 해보고 C++를 공부하시면 더 C++를 접근하기 좋습니다. ^^ 하지만 C언어를 공부하지 않아도 가능하니 하나하나 포기하지 말고 끝까지 함께 코딩 공부합시다~ ▣ 이번장에서는 C++ 출력에 대해 공부해보도록 하겠습니다. 비주얼 스튜디오 2022 버전으로 공부하도록 하겠습니다. 우선 빈프로젝트를 만들어주세요. ▣ 먼저 솔루션탐색기에서 소스파일을 생성하겠습니다. ▣ 이름은 여러분들이 원하는 이름으로 정해주시고. cpp 확장자 지정해주세요. . c == C언어 ,. cpp == C++입니다. 그럼 이제 코드를 작성해보겠습니다. ▣ 먼저 # 을 공부해보겠습니다. # : 전처리기를 의미합니다. 컴파일(기계어로 번역) 전에 처리를 하는.. 2022. 7. 21.
C++ [템플릿_02, template, typename] ▣ 이번장에서는 template 두 번째 장으로 다른 자료형 type을 사용할 경우에 어떻게 해야는지 공부해보겠습니다. ▣ 저번 1장에서 템플릿을 사용하여 코드를 작성해보겠습니다. 템플릿을 사용하는 이유는 간단합니다. 함수오버로딩시 다른 자료형 type일 경우 함수를 따로 만들어줘야 하는 불편함이 있었습니다. 그래서 템플릿을 사용하면 이렇게 어떤 자료형을 매개변수로 주더라도 그에 맞게 반환형을 주는걸 코드로 확인할 수 있습니다. 하지만 여기서 우리가 생각할 수 있는 문제는 같은 함수이지만 내가 원하는 타입일 경우 다른 함수를 지정하고 싶을 경우가 있습니다. 그럴 때 이렇게 코드를 작성합니다. ▣ 이렇게 template 을 따로 구분해주시고 함수를 내가 원하는 타입에 맞게 매개변수와 반환형을 지정해서 코드.. 2022. 4. 29.
C++ [클래스, 생성자, 소멸자] ▣ 안녕하세요. 이번장에서는 클래스에 생성자와 소멸자에 대해 공부해보겠습니다. ▣ MyClass라는 클래스를 생성해주시고, public에 MyClass()와 ~MyClass() 함수를 만들어보겠습니다. MyClass()는 클래스가 생성되었을 때 실행되는 함수이고, ~MyClass()는 클래스를 생성한 함수가 끝나게 되면 소멸되는 함수입니다. ▣ 메인에서 MyClass my;로 정의하고 코드를 실행하면 메인 시작 -> 생성자 -> 메인 끝 -> 소멸자 이렇게 출력되는 걸 확인할 수 있습니다. 여기서 중요한건 코드가 어떤 순서로 흘러가는지 출력 함수로 확인해보는 게 중요합니다. ▣ 이번에는 char *p 포인터를 선언해주시고, p = new char[100000] 메모리를 할당합니다. 그리고 소멸자에서 de.. 2022. 4. 19.
C++ [포인터, const] ▣ 안녕하세요. 이번장에서는 C++ 포인터에서 const를 사용하는 방법을 공부해보겠습니다. 포인터에서 이해가 안 되는 분은 C언어 포인터 부분을 꼭 공부해주세요. ▣ 기본적으로 포인터를 선언하여 num 변수에 주소를 지정하고 출력을 해보겠습니다. 그럼 p포인터가 num에 주소에 있는 값을 출력하는 걸 확인할 수 있습니다. ▣ 이번에는 &num 주소를 가르치고 있는 p포인터에 200을 대입해보겠습니다. 그럼 num에 값이 200으로 바뀐걸 확인할 수 있습니다. ▣ 여기서 const int * p = &num 포인터에 자료형 앞에 const 상수로 지정하는 키워드를 붙이게 되면 선언 정의 후에 값을 바꾸게 되면 오류가 나는 걸 확인할 수 있습니다. 포인터에 자료형 앞에 const를 붙이면 지정한 주소의 값.. 2022. 4. 13.
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.