프로그래밍 공부

C++ 26

카테고리 설명
  • C++에서는 함수 템플릿을 사용하여 함수 오버로딩 대신 사용할 수 있다. template를 통해 다양한 데이터타입에 대해 동일한 기능을 수행할 수 있도록 도와준다. template는 일반적으로 클래스나 함수를 정의할 때, 템플릿 매개변수를 사용하여 탕비정보를 전달하는 것이다. 이때 선언되는 템플릿 매개변수는 사용자가 입력하는 데이터 타입 으로 대체된다. 다음의 예시를 살펴보자. 위와 같이 T 문이 smax에 대해 형식이 자동으로 바뀌며 들어가는 것을 볼 수 있다. 이는 일반적인 함수선언과 다르게 하나의 함수 만 으로도 int와 double값을 자동으로 바꾸어주기 때문에 하나의 함수만으로 다양한 기능을 수행하게 할 수 있다. C++에서만 사용이 가능하다.

  • 함수 오버로딩 은 하나의 함수 이름을 여러번 정의하여 사용하는 것을 이야기 한다. 함수 오버로딩은 같은 이름의 함수가 서로 다른 매개변수 목록을 가지는 경우 사용이 가능하다. 예를 들어, 동일한 이름을 가진 함수가 있을 때 매개변수의 데이터 타입이나 개수가 다른 경우, 각 함수는 함수의 이름을 기준으로 호출되는것 이 아닌, 매개변수나 데이터 타입을 기준으로 먼저 참조된 다음, 함수의 이름을 참조하여 불러내게 된다. 이렇게 함수 오버로딩을 사용하게 되면, 코드의 가독성과 유지보수성을 향상시킬 수 있다. 비슷한 기능을 가지는 함수가 서로 다른 이름을 가지지 않아도 됨으로, 이름을 유지하는것이 더 쉽기 때문이다. 다음은 함수 오버로딩 을 사용한 코드의 예시이다. print는 전부 이름이 같지만, 매개변수의 종..

  • C++에서는 구조체를 선언하고 내부에 함수를 생성해줄 수 있다. 그러나, 구조체는 선언전에 메모리할당이 발생하지 않는다. 그럼으로 함수는 CODE 영역에 메모리가 할당되어 실행되게 되는데. 구조체 안에 함수가 존재하지 않음으로 사실 구조체는 함수를 실행할 수 없다. 구조체 내부에서 함수를 선언하고 실행하는건 다음과 같은 방식을 따른다. Print함수가 구조체 내부에서 선언됨을 볼 수 있다. 그러나, 함수는 구조체 내부에 존재하여도 구조체는 선언 전에 메모리 할당이 일어나지 않음으로 함수 메모리에 존재하나. 실행할 수 없다. 그럼으로 구조체 내부에 존재하는 함수는 __thiscall 을 내부에 붙여서 구조체 내부에서 함수를 다시 호출해준 뒤. 괄호 안에 자신의 구조채를 선언하여 동작하게 된다. 즉, 위에서..

  • 위 코드에서 ptr=NULL하지 않았고, 그럼으로인해 ptr에 남아있는 주소값이 임의의 메모리를 가리키게 되었음으로 유효하지 않는 메모리 주소를 가리키게 된다. 이를 Dangling Pointer 또는 Dangling Reference 라고 한다. 메모리를 해재 한 뒤. OS가 임의의 메모리공간으로 할당하여 사용하려고 할 때 주소값이 남아있음으로 코드 내에서 해당 주소로 접근이 가능해지기 때문에 심각한 보안 취약점으로 작용할 수 있다.

  • C와 C++의 메모리 동적할당을 알아보자. C에서 사용하는 메모리 동적할당은 다음과 같다. C언어에서는 malloc 과 calloc 그리고 realloc 을 사용하고, free를 통해서 동적할당된 변수를 날려줄 수 있다. 그러나 C언어에서의 동적할당은 free이후 메모리의 주소값이 들어있는 포인터를 NULL로 초기화 해주어야 했다. C++에서의 동적할당을 살펴보자. C++에서는 동적할당 시 C와 다르게 생성할 조건을 형변환 하지 않아도 자동으로 형변환 해주는 시스템을 가지고 있다. 다음을 살펴보자. delete 문을 사용하여 동적할당 된 포인터 변수를 초기화 해줄수 있고 따로 포인터변수를 NULL로 초기화 하지 않아도 된다. 그 외에도 해당되는 사이즈를 직접 초기화 해줄 수도 있다. new로 생성되는 동..

  • C++과 C는 배열 접근과 배열 생성방법이 조금씩 다르다. 예시를 살펴보자. 위의 예시와 같이, array 연산자를 사용하여 배열을 생성 할 수 있고, .at을 통해 접근이 가능하다. 위에 써놓은것 과 같이. at이 []보다 더 안정성이 높은데, 그 이유는,[]을 통해 접근하게되면, 범위를 벗어나도 접근이 가능하지만, .at으로 접근하게되면 범위를 벗어났을 시 밑과 같이 프로그램을 터트린다.