본문 바로가기

[ CODING STUDY ]/》C++ 공부18

C++ 18장 [템플릿1] ▣ 안녕하세요. 이번장에서는 템플릿에 대해 공부해보도록 하겠습니다. C++에서 함수를 작성하다 보면 함수의 이름을 동일하게 만드는 경우가 있습니다. 같은 의도로 다른 자료를 받는 경우에 그렇습니다. 그걸 오버 로딩이라고 하는데 이럴 경우 반환형이나 매개변수에 자료형(데이터 타입)을 모두 다 다르게 하여 구분을 해서 함수를 만들기도 합니다. 하지만 우리가 모든 자료형(데이터 타입)의 경우의 수를 다 생각하고 함수를 만들 수는 없습니다. 그렇기 때문에 템플릿을 사용해야 합니다. 템플릿은 형판이라는 뜻을 가지고 있으며, 함수에서 매개변수에 자료형 타입만 다른 중복된 함수들을 일반화시킨 틀을 템플릿이라고 합니다. 설명만 들으면 어려울 수 있으니 코드를 작성하며 공부해보도록 하겠습니다. ▣ 템플릿을 작성하려면 t.. 2022. 11. 24.
C++ 17장 [프렌드 함수] ▣ 안녕하세요. 이번장에서는 프렌드 함수를 공부해보도록 하겠습니다. C++에서 객체(클래스)의 private 멤버에는 해당 객체가 public 멤버 함수를 통해서만 접근이 가능했습니다. 하지만 상황에 따라 객체의 멤버 함수가 아닌 일반 함수도 private 멤버에 접근해야만 할 경우가 있습니다. 이럴 때 프렌드 함수를 사용합니다. 프렌드 함수를 사용하기 위해서는 프렌드(friend)라는 접근 제어 키워드를 사용해야 합니다. 코드를 작성하며 공부해보도록 하겠습니다. ▣ 먼저 클래스를 선언해주시고 public: 접근 연사자에서 friend 키워를 넣어 접근할 함수를 작성합니다. 그리고 함수의 매개변수에 (Calculator c)를 매개변수로 주시고 sum(Claculator c) 코드에서 처럼 매개변수 클래.. 2022. 11. 18.
C++ 16장 [static 멤버 변수, 함수] ▣ 안녕하세요. 이번장에서는 static 멤버에 대해 공부해보도록 하겠습니다. static을 공부할 때는 메모리 영역과 정적, 동적 이런 이야기를 해야 하지만, 이번장에서는 static에 사용 방법과 용도를 간단하게 공부해보겠습니다. ▣ static 멤버 변수와 멤버 함수를 선언하는 건 간단합니다. 선언할 멤버 변수 자료형 앞에 static 키워드를 붙어주시면 됩니다. 여기서 중요한건 static 멤버 변수는 모든 객체를 공유합니다. 그래서 반드시 int Calculator::number = 500; 코드에서처럼 전역 범위에서 정의 및 초기값을 지정해야 합니다. ▣ 메인 함수에서 객체를 각각 선언해주시고 선언한 객체로 static 멤버 변수를 접근하여 static 변수 주소를 출력하는 코드와 sum() .. 2022. 11. 16.
C++ 15장 [디폴트 매개변수] ▣ 안녕하세요. 이번장에서는 디폴트 매개변수(기본 매개변수)에 대해 공부해보겠습니다. 디폴트 매개변수는 말 그대로 매개변수를 기본으로 정의하는 걸 의미합니다. 코드를 작성하며 공부해보겠습니다. ▣ 클래스를 생성하는 코드를 작성해주시구요. 클래스에 멤버 함수를 생성해주세요. 멤버 함수 매개변수에 int n=10 이런 식으로 디폴트 매개변수를 정의합니다. 그리고 메인 함수에서 객체를 생성하고 c1.sum(), c1.sum(20) 이렇게 호출해주세요. 그럼 sum() 함수처럼 매개변수에 값을 전달하지 않아도 오류 없이 기본으로 지정되어 있는 10을 더한 값을 출력하고 sum(20) 함수 호출은 매개변수를 20으로 전달했기 때문에 디폴트 매개변수는 무시하고 내가 전달한 값 20을 저장하게 됩니다. 그리고 출력 .. 2022. 11. 11.
C++ 14장 [복사생성자] ▣ 안녕하세요. 이번장에서는 복사 생성자(Copy Constructor)를 공부해보겠습니다. 복사 생성자란 다른 객체의 내용을 복사해서 만드는 생성자를 의미합니다. 다시 말해 객체를 복사해서 사용한다라고 생각하시면 됩니다. ▣ 복사 생성자는 컴파일러에 의해 자동으로 만들어집니다. 그리고 모든 멤버 변수를 자동 복사합니다. 직접 코드를 작성하며 공부해보겠습니다. ▣ 먼저 클래스를 생성하고 멤버 함수를 선언했습니다. 코드를 작성하다가 주의해야한껀 private으로 멤버 변수를 지정했기 때문에 this->num = n를 기본 생성자에 넣어주셔야 내가 기본생성자 호출로 받아온 매개변수 값을 멤버 변수에 대입할 수 있습니다. ▣ 그리고 이렇게 Calculator c2(c1), Calculator c3 = c1 코.. 2022. 11. 11.
C++ 13장 [참조변수] ▣ 안녕하세요. 이번장에서는 참조 변수를 공부하도록 하겠습니다. 참조란 무언가 가리키는 걸 의미합니다. 참조 변수의 개념은 C언어의 포인터와 같은 방식입니다. 그럼 코드를 작성하고 이야기를 이어가겠습니다. ▣ C++에서 참조 변수는 int &p 코드처럼 & 기호를 넣어주면 됩니다. C언어의 포인터 int*p와 거의 비슷합니다. &는 참조자를 의미합니다. 우리가 C언에서 공부했던 것처럼 &를 기호를 변수 이름 앞에 &변수 이름 하면 주소를 의미합니다. 참조 변수를 만들 때 중요한 건 int&p = n; 코드처럼 참조 변수 초기화 시 변수를 대입해줘야 합니다. 대입하지 않으면 오류가 나게 됩니다. 그리고 Calculator& pCal = cal; 코드처럼 객체 클래스도 참조 변수로 사용이 가능합니다. 이제 .. 2022. 11. 4.
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.
C++ 1장 [출력, 네임스페이스] ▣ 안녕하세요. C++ 첫 번째 장입니다. C++을 하기 전에 C언어 공부를 꼭 해보고 C++를 공부하시면 더 C++를 접근하기 좋습니다. ^^ 하지만 C언어를 공부하지 않아도 가능하니 하나하나 포기하지 말고 끝까지 함께 코딩 공부합시다~ ▣ 이번장에서는 C++ 출력에 대해 공부해보도록 하겠습니다. 비주얼 스튜디오 2022 버전으로 공부하도록 하겠습니다. 우선 빈프로젝트를 만들어주세요. ▣ 먼저 솔루션탐색기에서 소스파일을 생성하겠습니다. ▣ 이름은 여러분들이 원하는 이름으로 정해주시고. cpp 확장자 지정해주세요. . c == C언어 ,. cpp == C++입니다. 그럼 이제 코드를 작성해보겠습니다. ▣ 먼저 # 을 공부해보겠습니다. # : 전처리기를 의미합니다. 컴파일(기계어로 번역) 전에 처리를 하는.. 2022. 7. 21.