모던 C++ 입문
더북(TheBook)

모던 C++ 입문

엔지니어를 위한 C++ 단기 집중 훈련
필요한 것만 빠르게 배운다

C++는 하드웨어에 밀착된 저수준에서 추상적인 고차원 프로그래밍까지 방대한 범위를 다루지만, 모든 것을 알아야만 C++ 프로그래밍을 할 수 있는 것은 아니다. 필요한 핵심만 배우면 당장 C++를 시작할 수 있다. C++ 문법 설명에 매몰되지 않고 핵심 개념 중심으로 빠르게 학습한다.

현장에서 검증된 교육 과정

C++가 뭔지도 모르는 물리학과, 수학과 같은 이과생을 비롯해 공대생에게 매년 2학기씩 3년간 C++를 가르치며 현장에서 검증했다. 현장 강의를 통해 얻은 경험을 반영해 교재로 엮었다.

C++11/14로 입문한다

C++는 표준안에 따라 문법이 크게 변화하며, 더 간결한 문법으로 진화한다. C++11/14로 더 쉽고 빠르게 C++ 언어에 입문할 수 있다.

«모던 C++ 입문»은 1장까지 공개합니다.

목차

  • 옮긴이의 말
  • 감사의 글
  • 들어가며
  • 1장 C++ 기초
  • 1.1 | 첫 번째 프로그램
  • 1.2 | 변수
  • 1.2.1 상수
  • 1.2.2 리터럴
  • 1.2.3 축소하지 않는 초기화
  • 1.2.4 범위
  • 1.3 | 연산자
  • 1.3.1 산술 연산자
  • 1.3.2 불 연산자
  • 1.3.3 비트 연산자
  • 1.3.4 할당 연산자
  • 1.3.5 프로그램 흐름
  • 1.3.6 메모리 처리
  • 1.3.7 접근 연산자
  • 1.3.8 타입 처리
  • 1.3.9 오류 처리
  • 1.3.10 오버로딩(Overloading)
  • 1.3.11 연산자 우선순위
  • 1.3.12 사이드 이펙트 피하기!
  • 1.4 | 표현식과 문장
  • 1.4.1 표현식
  • 1.4.2 문장
  • 1.4.3 분기문
  • 1.4.4 반복문
  • 1.4.5 goto
  • 1.5 | 함수
  • 1.5.1 인수
  • 1.5.2 결과 반환
  • 1.5.3 인라인
  • 1.5.4 오버로딩
  • 1.5.5 main 함수
  • 1.6 | 오류 처리
  • 1.6.1 단정
  • 1.6.2 예외
  • C++11 1.6.3 정적 단정
  • 1.7 | I/O
  • 1.7.1 표준 출력
  • 1.7.2 표준 입력
  • 1.7.3 파일 입출력
  • 1.7.4 일반적인 스트림 개념
  • 1.7.5 서식 지정
  • 1.7.6 I/O 오류 처리
  • 1.8 | 배열, 포인터, 레퍼런스
  • 1.8.1 배열
  • 1.8.2 포인터
  • C++11 1.8.3 스마트 포인터
  • 1.8.4 레퍼런스
  • 1.8.5 포인터와 레퍼런스의 비교
  • 1.8.6 오래된 데이터를 참조하지 마라!
  • 1.8.7 배열용 컨테이너
  • 1.9 | 소프트웨어 프로젝트 구축
  • 1.9.1 주석
  • 1.9.2 전처리기 지시문
  • 1.10 | 연습문제
  • 1.10.1 나이
  • 1.10.2 배열과 포인터
  • 1.10.3 매트릭스 마켓 파일의 헤더 읽기
  • 2장 클래스
  • 2.1 | 기술적인 세부 사항이 아닌 보편적인 의미를 위한 프로그램
  • 2.2 | 멤버
  • 2.2.1 멤버 변수
  • 2.2.2 접근성
  • 2.2.3 접근 연산자
  • 2.2.4 클래스에 대한 static 선언
  • 2.2.5 멤버 함수
  • 2.3 | 값 설정: 생성자 및 할당 연산자
  • 2.3.1 생성자
  • 2.3.2 할당
  • C++11 2.3.3 초기화 리스트
  • C++11 2.3.4 유니폼 초기화*
  • C++11 2.3.5 이동 문법
  • 2.4 | 소멸자
  • 2.4.1 구현 규칙
  • 2.4.2 리소스 제대로 처리하기
  • 2.5 | 메서드 생성 규칙
  • 2.6 | 멤버 변수에 접근하기
  • 2.6.1 접근 함수
  • 2.6.2 첨자 연산자
  • 2.6.3 상수 멤버 함수
  • C++11 2.6.4 레퍼런스로 한정된 멤버
  • 2.7 | 연산자 오버로딩 디자인
  • 2.7.1 일관성있게 디자인하라
  • 2.7.2 우선순위를 존중하라
  • 2.7.3 멤버 함수 또는 자유 함수
  • 2.8 | 연습문제
  • 2.8.1 다항식
  • 2.8.2 이동 할당 연산자
  • 2.8.3 초기화 리스트
  • 2.8.4 리소스 구조
  • 3장 제네릭 프로그래밍
  • 3.1 | 함수 템플릿
  • 3.1.1 인스턴스화
  • 3.1.2 매개변수 타입 추론
  • 3.1.3 템플릿의 오류 처리
  • 3.1.4 타입 혼합하기
  • C++11 3.1.5 유니폼 초기화
  • C++14 3.1.6 자동 return 타입
  • 3.2 | 네임스페이스와 함수 룩업
  • 3.2.1 네임스페이스
  • 3.2.2 인수 종속 룩업*
  • 3.2.3 네임스페이스 한정 또는 ADL
  • 3.3 | 클래스 템플릿
  • 3.3.1 컨테이너 예제
  • 3.3.2 유니폼 클래스 및 함수 인터페이스 디자인
  • 3.4 | 타입 추론과 정의
  • 3.4.1 auto 변수 타입
  • C++11 3.4.2 표현식의 타입
  • C++11 3.4.3 decltype(auto)
  • C++11 3.4.4 타입 정의하기
  • 3.5 | 템플릿에 대한 약간의 이론: 컨셉
  • 3.6 | 템플릿 특수화
  • 3.6.1 하나의 타입에 대한 클래스 특수화
  • 3.6.2 함수 특수화 및 오버로딩
  • 3.6.3 부분 특수화
  • 3.6.4 부분 특수화한 함수
  • 3.7 | 타입이 아닌 템플릿 매개변수
  • 3.8 | 펑터(Functor)
  • 3.8.1 함수와 같은 매개변수
  • 3.8.2 펑터 합성하기
  • 3.8.3 재귀
  • 3.8.4 제네릭 축소
  • 3.9 | 람다(Lambda) C++11
  • C++11 3.9.1 캡처
  • C++11 3.9.2 값에 의한 캡처
  • C++11 3.9.3 레퍼런스에 의한 캡처
  • C++11 3.9.4 일반화된 캡처
  • C++14 3.9.5 제네릭 람다
  • 3.10 | 가변 템플릿(Variadic Template)
  • 3.11 | 연습문제
  • 3.11.1 문자열 표현
  • 3.11.2 튜플의 문자열 표현
  • 3.11.3 제네릭 스택
  • 3.11.4 벡터의 반복자
  • 3.11.5 홀수 반복자
  • 3.11.6 홀수 범위
  • 3.11.7 bool 타입 스택
  • 3.11.8 임의의 크기를 갖는 스택
  • 3.11.9 타입이 아닌 템플릿 인수 추론하기
  • 3.11.10 사다리꼴 공식
  • 3.11.11 펑터
  • 3.11.12 람다 표현식
  • 3.11.13 make_unique 구현하기
  • 4장 라이브러리
  • 4.1 | 표준 템플릿 라이브러리
  • 4.1.1 도입 예제
  • 4.1.2 반복자
  • 4.1.3 컨테이너
  • 4.1.4 알고리즘
  • 4.1.5 반복자를 넘어서
  • 4.2 | 수치
  • 4.2.1 복소수
  • C++11 4.2.2 난수 생성기
  • 4.3 | 메타 프로그래밍
  • 4.3.1 한계
  • C++11 4.3.2 타입 특성
  • 4.4 | 유틸리티 C++11
  • C++11 4.4.1 튜플
  • C++11 4.4.2 function
  • C++11 4.4.3 레퍼런스 래퍼
  • 4.5 | 지금 시각은? C++11
  • 4.6 | 동시성 C++11
  • 4.7 | 표준 너머에 있는 과학 라이브러리
  • 4.7.1 다른 산술 연산
  • 4.7.2 구간 산술 연산
  • 4.7.3 선형 대수
  • 4.7.4 상미분 방정식
  • 4.7.5 편미분 방정식
  • 4.7.6 그래프 알고리즘
  • 4.8 | 연습문제
  • 4.8.1 크기를 기준으로 정렬하기
  • 4.8.2 STL 컨테이너
  • 4.8.3 복소수
  • 5장 메타 프로그래밍
  • 5.1 | 컴파일러가 계산하도록 만들기
  • C++11 5.1.1 컴파일 타임 함수
  • C++14 5.1.2 확장된 컴파일 타임 함수
  • C++14 5.1.3 소수 판정
  • C++11 5.1.4 상수는 어떻게 불변 상태가 되는가?
  • 5.2 | 타입 정보 제공하기 및 사용하기
  • 5.2.1 타입 특성
  • C++11 5.2.2 조건부 예외 처리
  • 5.2.3 const를 깔끔하게 처리하는 뷰 예제
  • C++11 5.2.4 표준 타입 특성
  • 5.2.5 도메인 타입 특성
  • C++11 5.2.6 enable_if
  • C++11 5.2.7 가변 템플릿 수정
  • 5.3 | 표현식 템플릿
  • 5.3.1 간단한 연산자 구현
  • 5.3.2 표현식 템플릿 클래스
  • 5.3.3 제네릭 표현식 템플릿
  • 5.4 | 메타 튜닝: 독자적인 컴파일러 최적화 작성
  • 5.4.1 고전적인 고정 크기 풀기
  • 5.4.2 중첩 풀기
  • 5.4.3 동적 풀기–워밍업
  • 5.4.4 벡터 표현식 풀기
  • 5.4.5 표현식 템플릿 튜닝
  • 5.4.6 감소 연산 튜닝
  • 5.4.7 중첩 반복문 튜닝
  • 5.4.8 튜닝 요약
  • 5.5 | 연습문제
  • 5.5.1 타입 특성
  • 5.5.2 피보나치 수열
  • 5.5.3 최대 공약수를 위한 메타 프로그램
  • 5.5.4 벡터 표현식 템플릿
  • 5.5.5 메타 리스트
  • 6장 개체 지향 프로그래밍
  • 6.1 | 기본 원칙
  • 6.1.1 기본 클래스와 파생 클래스
  • C++11 6.1.2 생성자 상속
  • 6.1.3 가상 함수와 다형성 클래스
  • 6.1.4 상속을 통한 펑터
  • 6.2 | 중복 제거
  • 6.3 | 다중 상속
  • 6.3.1 복수의 부모 클래스
  • 6.3.2 공통의 조부모
  • 6.4 | 서브 타입별 동적 선택
  • 6.5 | 변환
  • 6.5.1 기본 클래스와 파생 클래스 간의 변환
  • 6.5.2 const_cast
  • 6.5.3 reinterpret_cast
  • 6.5.4 함수 스타일 변환
  • 6.5.5 암시적 변환
  • 6.6 | CRTP
  • 6.6.1 간단한 예제
  • 6.6.2 재사용 가능한 접근 연산자
  • 6.7 | 연습문제
  • 6.7.1 중복이 없는 다이아몬드 모양
  • 6.7.2 상속 벡터 클래스
  • 6.7.3 복제 함수
  • 7장 과학 프로젝트
  • 7.1 | ODE 해결 프로그램의 구현
  • 7.1.1 상미분 방정식
  • 7.1.2 룽게-쿠타 알고리즘
  • 7.1.3 제네릭 구현
  • 7.1.4 전망
  • 7.2 | 프로젝트 만들기
  • 7.2.1 빌드 프로세스
  • 7.2.2 빌드 도구
  • 7.2.3 분리된 컴파일
  • 7.3 | 마지막으로 남기는 말
  • 부록 A 다루기 힘든 부분
  • A.1 | 더 좋고 나쁜 과학 소프트웨어
  • A.2 | 자세한 기초 지식
  • A.2.1 리터럴 한정에 대한 추가 정보
  • A.2.2 static 변수
  • A.2.3 if에 대해 자세히 알아보기
  • A.2.4 더프의 장치
  • A.2.5 main에 대해 자세히 알아보기
  • A.2.6 단정문? 예외?
  • A.2.7 바이너리 I/O
  • A.2.8 C-스타일 I/O
  • C++11 A.2.9 가비지 콜렉션
  • A.2.10 매크로 문제
  • A.3 | 실제 예: 역행렬
  • A.4 | 클래스 세부 정보
  • A.4.1 멤버를 가리키는 포인터
  • A.4.2 더 많은 초기화 예제
  • A.4.3 다차원 배열에 접근하기
  • A.5 | 멤버 함수 생성
  • C++11 A.5.1 생성 제어
  • A.5.2 생성 규칙
  • A.5.3 함정과 설계 지침
  • A.6 | 템플릿 세부 정보
  • C++11 A.6.1 유니폼 초기화
  • A.6.2 어떤 함수를 호출했는가?
  • A.6.3 특정 하드웨어를 위한 특수화
  • C++11 A.6.4 가변 바이너리 I/O
  • A.7 | C++03에서 std::vector의 사용
  • A.8 | 이전 스타일에서의 동적 선택
  • A.9 | 메타 프로그래밍 세부 정보
  • A.9.1 역사상 첫 번째 메타 프로그램
  • A.9.2 메타 함수
  • C++03 A.9.3 하위 호환 가능한 정적 단정문
  • A.9.4 익명 타입 매개변수
  • A.9.5 동적 풀기의 벤치마크 소스
  • A.9.6 행렬 곱셈을 위한 벤치마크
  • 부록 B 프로그래밍 도구
  • B.1 | gcc
  • B.2 | 디버깅
  • B.2.1 텍스트 기반 디버거
  • B.2.2 그래픽 인터페이스 디버깅: DDD
  • B.3 | 메모리 분석
  • B.4 | gnuplot
  • B.5 | 유닉스, 리눅스, 그리고 맥 OS
  • 부록 C 언어 정의
  • C.1 | 값의 종류
  • C.2 | 연산자 개요
  • C.3 | 변환 규칙
  • C.3.1 승격
  • C.3.2 다른 변환
  • C.3.4 축소
  • C.3.3 일반적인 산술 변환
  • 부록 D 참고 문헌
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.