C++ 15

[C++] 디폴트 매개변수, 함수 오버로딩, 함수 템플릿

✔ 디폴트 매개변수 디폴트 매개변수는 함수 호출에서 실제 매개변수를 생략했을 경우에 실제 매개변수 대신 사용되는 값이다. int harpo(int n, int m = 4, int j = 5); // 가능 int chico(int n, int m = 6, int j); // 불가능 int groucho(int k = 1, int m = 2, int n = 3); // 가능 ✔ 함수 오버로딩 함수 오버로딩(overloading)은 함수의 다형(polymorphism)이라고도 부른다. 함수의 다형은 서로 다른 여러 개의 함수가 하나의 이름을 공유하는 것이다. 여기서 '다형'은 다양한 형태를 가진다는 뜻이다. 함수 오버로딩은 본질적으로는 같은 일을 처리하지만, 매개변수 리스트가 서로 다른 여러 개의 함수를 하나..

📚책읽기 2023.01.26

[C++] 인라인 함수, 참조 변수

✔ 인라인 함수(inline) 인라인 기능은 C에 없다가 C++언어에서 새로 생겨난 기능이다. 매크로 함수와 비슷하지만, 매크로는 인라인 코드를 소스적으로 구현한 형태이기 때문에 매개변수를 넘기는 것이 아니라 텍스트를 대체함으로써 동작한다. // 인라인 함수 정의 inline double square(double x) {return x * x}; 인라인 함수는 컴파일된 함수 코드가 프로그램의 다른 코드 안에 직접 삽입되어있다. 즉, 컴파일러가 함수 호출을 그에 대응하는 함수 코드로 대체한다는 것을 의미한다. 인라인 코드를 이용하면 함수를 그 자리에서 처리하므로, 그 함수를 수행하기 위해 프로그램이 다른 주소로 점프했다가 돌아올 필요가 없다. 따라서 일반함수보다 약간 빠르게 수행되지만, 메모리 사용 측면에..

📚책읽기 2023.01.24

[C++] 가변배열(동적할당 활용)

가변 배열의 구현 이전 시간에 공부한 동적 할당 개념을 활용하여 'int형 가변 배열'을 직접 구현해보았다. - Arr.h 헤더 파일 및 Arr.cpp 파일 생성 Arr.h 헤더 파일의 생성 가변 배열의 필수 구조체 멤버 // int형 가변배열 typedef struct _tabArr { // 필수 멤버 3가지 int* pInt; int iCount; int iMaxCount; }tArr; 가변 배열을 구현하기 위해 헤더 파일에 구조체를 생성하였다. 구조체 필수 멤버로는 배열을 저장할 포인터 변수(pInt), 현재 배열의 요소 수를 확인할 변수(iCount), 배열의 최대 크기 변수(iMaxCount)까지 3가지가 필요하다. 가변 배열 필수 함수 // 배열 초기화 함수 void InitArr(tArr* ..

📚책읽기 2022.04.04

[C++] 동적할당(malloc)

동적 할당 동적 할당은 프로그램 실행 도중에(런타임 중) 사용자가 원하는 만큼 메모리를 요청할 수 있도록 한다. 이때 사용하는 메모리 영역은 스택/데이터/ROM/힙 영역 중 힙(Heap) 메모리 영역이다. 동적 할당은 원하는 메모리 크기를 힙 메모리 영역에서 할당하고 할당된 첫 번째 주소를 받아와서 어떤 목적으로 사용할지 포인터 캐스팅을 하면 된다. // 1. 힙 영역에 100 byte 만큼의 메모리를 할당 // 2. 할당된 시작 주소를 pInt 포인터 변수에 저장 int* pInt = (int*)malloc(100); (int*)와 같이 강제 포인터 캐스팅을 한 이유 malloc(memory allocator)은 반환 타입이 void 포인터의 함수이다. void 포인터는 주소만을 저장하기 위한 목적으로..

📚책읽기 2022.04.04

[C++] 문자열 함수(wcslen, wcscat_s, wcscmp), 함수 구현 과제

문자열의 길이 판별 함수 wcslen(const wchar_t* _String); 문자열의 길이를 판별할 때 해당 문자열을 변형시키면 안 되기 때문에 const wchar_t*를 통해 제한을 걸어준다. 직접 구현 /* 문자열의 길이 체크 함수 (wcslen 구현) */ unsigned int GetLength(const wchar_t* _pStr) { // 문자 개수 체크 용도 int i = 0; while ('\0' != _pStr[i]) { ++i; } return i; } 문자열 이어 붙이는 함수 wcscat_s(wchar_t* _pDest, unsigned int _iBufferSize, const wchar_t* _pSrc); - 매개변수는 "이어 붙어질 문자열(_pDest)", "이어 붙어질 ..

📚책읽기 2022.03.13

[C++] 문자, 문자열(char, wchar_t, const wchar_t*)

문자 wchar_t wc = 65; // 아스키코드 값 : A short s = 65; // 메모리 상에서 상수 1과 문자 '1'은 다르게 판별된다. char c = 1; // 숫자 그대로 '\x1'로 해석 char c = '1'; // 아스키코드 값 49로 해석 wchar_t wc = 459; // 459를 숫자로 저장하면 459의 2진수 값이 저장된다. wchar_t wc = '459'; // 459를 문자로 저장하면 '4','5','6'의 각 아스키코드 값이 저장된다. 문자열 많이 쓰이는 문자열 타입은 char 과 wchar_t 가 있다. char ch = 'a'; wchar_t wct = L'a'; char 자료형은 '멀티 바이트' 문자열로써 1byte와 2byte가 동시에 사용된다. (이로 인해..

📚책읽기 2022.03.09

[C/C++] const 포인터, void 포인터

const 상수화 : 숫자가 변하지 않음 l-value : 변수 r-value : 상수 const라는 키워드는 변수를 '상수화' 시켜주는 역할을 수행한다. 하지만 일반적으로 사용하는 진짜 상수(10, 20,...)처럼 변화하는 것은 아니다. 문법적으로 상수화를 지켜주는 것이지 진짜 상수는 아니다. const와 포인터 포인터의 두 가지 상황(역할) 1. 포인터 자체가 가리킬 변수의 주소를 변경할 수 있다. 2. 포인터가 가리킨 변수의 값을 변경할 수 있다. const - 포인터 const 포인터는 "포인터가 가리키는 원본 변수가 상수화 된 것" 이다. int a = 0; int b = 0; const int* pConstInt = &a; pConstInt = &b; // 가능 *pConstInt = 100..

📚책읽기 2022.03.09

[C/C++] 포인터 이해 확인 문제

문제 1. short sArr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int* pI = (int*)sArr; int iData = *((short*)(pI + 2)); printf("1번 문제 정답 : %d\n", iData); 문제 풀이 short 배열은 2byte 단위로 이루어져 있다. pI는 int형 포인터이기 때문에 4byte 단위로 해석하게 된다. 이후 pI에 +2를 했기 때문에 주소는 4byte씩 2번 해석되어 8byte가 넘어가게 된다. [0]=1 (2byte) / [1]=2 (2byte) / [2]=3 (2byte) / [3]=4 (2byte) / [4]=5 (2byte) / [5]=6 (2byte) / ... 위와 같은 배열의 메모리 구조에서 8byte가 넘어가면 [4]..

📚책읽기 2022.03.07

[C/C++] 포인터 변수, 포인터 배열

포인터 변수 포인터 변수란 주소를 저장하는 변수로써 형태로 작성된다. 포인터 변수에서 자료형은 해당 포인터에게 전달된 주소를 해석하는 단위로써 사용된다. int i = 100; int* pInt = &i; 위의 포인터 변수는 변수 i의 주소를 저장하며 int형이므로 4바이트 단위로 주소를 해석하게 된다. 포인터의 해석 주소는 정수 표현이기 때문에 bit단위로 표현될 수 없어 Byte 단위로만 해석된다. 포인터 변수는 "이미 답이 정해진 변수"이다. 포인터 변수를 int*로 선언하였으면 해당 주소의 데이터는 int형이어야만 한다. 만약 자료형이 float인 경우도 4byte 단위이고, int인 경우도 4byte 단위로 같은 경우, float을 int형 포인터 배열(int*)에 저장하게 된다면 어떤 문제점이..

📚책읽기 2022.03.07
728x90