본문 바로가기

Programming II/C++24

[전문가를 위한 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.
[전문가를 위한 C++] CHAPTER9 클래스와 객체 완전 정복 9.1 프렌드- c++는 클래스 안에서 다른 클래스, 다른 클래스의 멤버 함수 또는 비 멤버 함수를 프렌드로 선언하는 기능을 제공한다. 프렌드로 선언한 대상은 이 클래스의 protected나 private 데이터 멤버와 메서드에 접근할 수 있습니다.- 특정한 메서드만 프렌드로 만들 수도 있다.- 프렌드로 지정할 클래스, 메서드, 함수는 반드시 접근을 허용할 클래스에서 지정해야 한다. 이들을 대상 클래스가 아닌 다른 곳에서 프렌드라고 선언해서 그 클래스의 private이나 protected 멤버에 접근하게 할 수는 없다.- 클래스나 메서드를 프렌드로 지정하는 기능을 남용하지 않도록 주의한다. 프렌드 기능은 클래스 내부를 다른 클래스나 함수에 드러내기 때문에 캡슐화 원칙에 위배될 수 있다. 따라서 꼭 필요한.. 2025. 4. 10.
[전문가를 위한 C++] CHAPTER8 클래스와 객체 이해 ⁃ 객체지향 언어인 c++는 객체를 정의하거나 사용할 수 있도록 클래스를 제공한다.8.1 스프레드시트 예제8.2 클래스 작성 방법⁃ 클래스를 작성하려면 그 클래스의 모든 객체에 대한 동작(메서드)과 각 객체의 속성(데이터 멤버)를 지정한다.8.2.1 클래스 정의⁃ 클래스 정의는 항상 class 키워드와 클래스 이름으로 시작한다.    - c++에서 클래스 정의는 일종의 선언문이므로 반드시 끝에 세미콜론을 붙인다. ⁃ 클래스를 모듈로 정의했고 그 모듈을 임포트하는 클라이언트가 그 클래스를 볼 수 있게 하려면 class 키워드 앞에 export를 붙인다. + 1. 클래스 멤버 ⁃ 클래스는 멤버를 가질 수 있다. 멤버는 메서드, 생성자, 소멸자와 같은 함수(멤버 함수)일 수도 있고, 열거형, 타입 엘리어스, .. 2025. 4. 9.