본문 바로가기

Programming II52

[전문가를 위한 C++] CHAPTER26 고급 템플릿 26.1 템플릿 매개변수에 대한 심화 학습- 템플릿 매개변수는 타입, 비타입, 템플릿 템플릿의 세 가지 종류가 있다.26.1.1 템플릿 타입 매개변수에 대한 심화 학습- 템플릿을 사용하는 주 목적은 타입 매개변수를 사용하는 데 있다. - 타입 매개변수는 원하는 만큼 얼마든지 많이 선언할 수 있다.- stack, queue, priority_queue 클래스 템플릿은 모두 템플릿 타입 매개변수를 인수로 받고, 내부 컨테이너에 대한 기본값도 정해져 있다.26.1.2 템플릿 템플릿 매개변수- 템플릿 매개변수에서 템플릿을 받으려면 템플릿 템플릿 매개변수라는 특수 매개변수를 사용해야 한다. - 템플릿 템플릿 매개변수를 지정하는 방식은 일반 함수의 매개변수에 함수 포인터를 지정하는 방식과 비슷하다. -.. 2025. 5. 6.
[전문가를 위한 C++] CHAPTER25 표준 라이브러리 커스터마이즈 및 확장 방법 ⁃ 기존 표준 라이브러리 기능과 호환되는 컨테이너나 알고리즘, 반복자를 만들 수 있다. 심지어 사용할 컨테이너에 적용할 메모리 할당 방식도 정의할 수 있다.25.1 할당자⁃ 표준 라이브러리 컨테이너마다 allocator 타입을 템플릿 매개변수로 받는다. 대부분 이 매개변수의 기본값만 사용해도 충분하다.⁃ 이를 통해 컨테이너 생성자에서 allocator객체를 지정할 수 있다. 그러면 컨테이너에 메모리를 할당하는 방식을 변경할 수 있다.⁃ 표준 라이브러리는 std::allocator라는 이름의 기본 allocator 클래스를 제공한다. 이 클래스는 allocate()와 deallocator()를 각각 operator new와 operator delete에 대한 래퍼로 구현한다. - allocate()는 .. 2025. 5. 6.
[전문가를 위한 C++] CHAPTER19 함수 포인터, 함수 객체, 람다 표현식 - C++의 함수는 일급 함수라고 부른다. 함수를 일반 변수처럼 다른 함수의 인수로 전달하거나, 다른 함수에서 리턴하거나, 변수에 대입할 수 있기 때문이다. 이렇게 사용하는 함수를 콜백이라고도 부른다. 호출될 수 있는 대상임을 표현하는 용어다. - operator()를 오버로드한 것을 함수 객체, 또는 간단히 펑터라고 부른다. 19.1 함수 포인터- 함수 포인터라는 타입이 있다. 함수 포인터 타입은 매개변수 타입과 리턴 타입에 따라 결정된다.- 함수 포인터를 다루는 한 가지 방법은 타입 앨리어스를 이용하는 것이다. 타입 앨리어스를 이용하면 특정한 속성을 가진 함수들을 타입 이름 하나로 부를 수 있다.- 다른 함수를 매개변수로 받는 함수 또는 함수를 리턴하는 함수를 고차 함수라 부른다.- 함수 포인터는.. 2025. 4. 28.
[전문가를 위한 C++] CHAPTER18 표준 라이브러리 컨테이너 18.1 컨테이너 개요- 컨테이너란 여러 개의 데이터를 저장하고, 관리하고, 다룰 수 있게 해주는 C++ 표준 라이브러리 템플릿 객체합니다. - 컨테이너에는 순차 컨테이너, 정렬 연관 컨테이너, 비정렬 연관 컨테이너, 컨테이너 어댑터가 있습니다. - 대부분의 컨테이너는 이터레이터(iterator) 를 통해 원소에 접근합니다.18.1.1 원소에 대한 요구사항- 원소 타입은 복사, 이동, 할당 가능해야 하고, 비교 연산자를 제공해야 합니다. - 원소 타입은 다음 연산이 가능해야 합니다. - 복사 생성자, 이동 생성자 - 복사 대입 연산자, 이동 대입 연산자 - 소멸자- 정렬 연관 컨테이너(map, set 등)는 - 비정렬 연관 컨테이너(unordered_map 등)는 해시 함수와 == .. 2025. 4. 28.
[전문가를 위한 C++] CHAPTER15 연산자 오버로딩 15.1 연산자 오버로딩 개요- C++는 +, 15.1.1 연산자 오버로딩의 용도- 연산자마다 다르지만 일반적으로 자신이 정의할 클래스를 기본 타입처럼 다루기 위해서다.- 또 다른 이유는 프로그램을 좀 더 세밀하게 제어하기 위해서다.15.1.2 연산자 오버로딩의 한계연산자 기호를 새로 추가할 수 없다. c++에 이미 정의된 연산자에 대해 의미만 변경할 수 있다..와 .*(객체 멤버 액세스), ::(스코프 지정 연산자), sizeof, ?:(조건 연산자)를 비롯한 일부 연산자는 오버로드할 수 없다.애리티(arity)는 연산자의 인수 또는 피연산자(operand)의 개수다. 함수 호출, new, delete 연산자에 대해서만 애리티를 변경할 수 있다. 다른 연산자는 애러티를 변경할 수 없다. ++와 같은 단.. 2025. 4. 21.
[전문가를 위한 C++] CHAPTER12 템플릿으로 제네릭 코드 만들기 - C++는 객체지향 프로그래밍뿐만 아니라 제네릭 프로그래밍도 지원한다. 제네릭 프로그래밍의 목적은 재사용 가능한 코드를 작성하는 것이다. - C++에서 제네릭 프로그래밍을 지원하기 위한 핵심 요소는 템플릿이다.12.1 템플릿 소개- 절차형 프로그래밍 패러다임에 따르면 프로시저나 함수 단위로 프로그램을 작성한다. - 그중에서도 특히 함수를 많이 사용하는데, 알고리즘을 작성할 때 특정한 값에 종속되지 않게 실행되도록 구현해두면 나중에 다른 값에 대해 얼마든지 재사용할 수 있기 때문이다. - sqrt() 함수는 사용자가 매개변수에 지정한 모든 값에 대해 실행하도록 구현했다. 컴퓨터 과학자는 함수를 이렇게 작성하는 것을 매개변수화라고 표현한다. - 객체지향 프로그래밍 패러다임은 객체란 개념도 .. 2025. 4. 17.