두렵지 않은 C++ [영리하게 코딩하고 싶은 C++ 초급 개발자를 위한 가이드]
- 원서명C++ Without Fear: A Beginner's Guide That Makes You Feel Smart (2nd Edition) (ISBN 9780132673266)
- 지은이브라이언 오버랜드
- 옮긴이한정애
- ISBN : 9788960774025
- 40,000원
- 2013년 02월 27일 펴냄 (절판)
- 페이퍼백 | 620쪽 | 188*250mm
- 시리즈 : 프로그래밍 언어
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
기존 C++ 입문서와 달리 쉽고 재미있는 데다 실용적이기까지 한 예제를 중심으로 C++의 기본을 충실히 설명하는 책이다. C++ 초보자를 대상으로 가장 기본적인 제어 구조, 함수 및 파일 접근에서부터 시작해 다형성에 이르기까지 방대한 C++의 기능을 잘 풀어 썼다. 입문서이기는 하지만 새로 공개된 C++11과 템플릿에 대해서도 소개하며, 처음 쓰기에 적합한 STL도 알려주므로, C++ 초보는 물론 C++ 중급 이상의 개발자들도 기초를 다시 튼튼히 하고 자주 저지르던 잘못을 바로잡고 싶다면 이 책을 읽어보자.
[ 소개 ]
컴퓨터 프로그래밍을 해보고 싶었다면, 그 중에서도 특히 널리 사용되는 C++를 배우고 싶었다면 『두렵지 않은 C++』로 시작하자. C++를 배우는 가장 멋진 방법이다.
호평을 받았던 초판에서처럼 저자는 입력하기 편한, 짧고 간단한 예제를 강조했다. 몇 장이 지나면 유용한 유틸리티도 만들 수도 있고, 게임을 즐길 수도 있으며, 재미있는 컴퓨터 퍼즐을 만들 수도 있다. 복잡하기만 하거나 의미 없는 예제를 보여주곤 하는 많은 프로그래밍 교과서에서 벗어나 그의 방식을 따라 해보자. 이 책에는 여러분이 프로그래밍을 빨리 배우기 위해 필요한 모든 것들이 끈기 있게 설명돼 있고, 명확하게 묘사돼 있을 뿐만 아니라, 심지어 재미있기까지 하다.
물론 프로그래밍은 복잡한 일이고 C++는 전문가들이 사용하는 언어다. 사실 가장 멋진 게임들, 그래픽과 인터넷 애플리케이션들 대부분은 C++로 만들어졌고 화성 탐사 로봇에서도 사용됐다.
하지만 C++라는 언어 자체는 표지에 실린 괴물처럼 두려워해야 할 존재가 아니다. 잘게 쪼개고 들어가면서 그 진수를 파악하고, 간단한 예제로 공부하고 실용적인 연습문제를 풀어보면서 각 기능들이 왜 있는 것인지, 그리고 어떤 트릭이 숨겨져 있는지 알게 되는 동안 엄청나게 빠르게 C++를 배워나갈 수 있을 것이다.
[ 이 책에서 다루는 내용 ]
『두렵지 않은 C++』에서 다루는 내용
■ C++ 프로그래밍의 기초
■ 자신만의 프로그래밍 작성법
■ 각 프로그램 조각들의 동작 원리
■ 유용하고 재사용 가능한 프로그램 코드 작성
■ 쉽고 이해하기 쉬운 용어로 익히는 객체지향 프로그래밍
이 책의 내용은 거의 모든 C++ 언어에 적용할 수 있지만, 최근에 나온 아주 훌륭한 C++ 표준인 C++11의 중요한 기능 몇 가지를 추가로 설명했다.
개정판에서 추가된 내용
■ 더 늘어난 그림, 예제와 연습문제
■ 더욱 풍부해진 퍼즐과 게임
■ 75페이지에 달하는 C++ 언어 참고 자료
■ 무료 C++ 소프트웨어 다운로드 방법
그냥 재미 삼아 C++ 프로그래밍을 배우려는 것이든, 프로그래밍으로 성공하고 싶은 것이든, 이 책이야말로 여러분이 선택할 수 있는 최고의 책이다.
[ 소개 ]
컴퓨터 프로그래밍을 해보고 싶었다면, 그 중에서도 특히 널리 사용되는 C++를 배우고 싶었다면 『두렵지 않은 C++』로 시작하자. C++를 배우는 가장 멋진 방법이다.
호평을 받았던 초판에서처럼 저자는 입력하기 편한, 짧고 간단한 예제를 강조했다. 몇 장이 지나면 유용한 유틸리티도 만들 수도 있고, 게임을 즐길 수도 있으며, 재미있는 컴퓨터 퍼즐을 만들 수도 있다. 복잡하기만 하거나 의미 없는 예제를 보여주곤 하는 많은 프로그래밍 교과서에서 벗어나 그의 방식을 따라 해보자. 이 책에는 여러분이 프로그래밍을 빨리 배우기 위해 필요한 모든 것들이 끈기 있게 설명돼 있고, 명확하게 묘사돼 있을 뿐만 아니라, 심지어 재미있기까지 하다.
물론 프로그래밍은 복잡한 일이고 C++는 전문가들이 사용하는 언어다. 사실 가장 멋진 게임들, 그래픽과 인터넷 애플리케이션들 대부분은 C++로 만들어졌고 화성 탐사 로봇에서도 사용됐다.
하지만 C++라는 언어 자체는 표지에 실린 괴물처럼 두려워해야 할 존재가 아니다. 잘게 쪼개고 들어가면서 그 진수를 파악하고, 간단한 예제로 공부하고 실용적인 연습문제를 풀어보면서 각 기능들이 왜 있는 것인지, 그리고 어떤 트릭이 숨겨져 있는지 알게 되는 동안 엄청나게 빠르게 C++를 배워나갈 수 있을 것이다.
[ 이 책에서 다루는 내용 ]
『두렵지 않은 C++』에서 다루는 내용
■ C++ 프로그래밍의 기초
■ 자신만의 프로그래밍 작성법
■ 각 프로그램 조각들의 동작 원리
■ 유용하고 재사용 가능한 프로그램 코드 작성
■ 쉽고 이해하기 쉬운 용어로 익히는 객체지향 프로그래밍
이 책의 내용은 거의 모든 C++ 언어에 적용할 수 있지만, 최근에 나온 아주 훌륭한 C++ 표준인 C++11의 중요한 기능 몇 가지를 추가로 설명했다.
개정판에서 추가된 내용
■ 더 늘어난 그림, 예제와 연습문제
■ 더욱 풍부해진 퍼즐과 게임
■ 75페이지에 달하는 C++ 언어 참고 자료
■ 무료 C++ 소프트웨어 다운로드 방법
그냥 재미 삼아 C++ 프로그래밍을 배우려는 것이든, 프로그래밍으로 성공하고 싶은 것이든, 이 책이야말로 여러분이 선택할 수 있는 최고의 책이다.
목차
목차
- 1장 첫 번째 C++ 프로그램
- 프로그래머처럼 생각하기
- 컴퓨터는 시키는 대로만 한다
- 프로그램에게 무엇을 시킬지 결정하기
- 동등한 C++ 명령문 작성
- 칼럼: 컴퓨터는 정말 얼마나 ‘똑똑’한가, 진짜?
- 몇 가지 바보 같은 정의 - 리뷰
- C++는 무엇이 다른가?
- C++ 프로그램 작성
- 프로그램 명령문 입력
- 프로그램 빌드(컴파일과 링크)
- 프로그램 테스트
- 필요한 만큼 수정
- 자신만의 C++ 컴파일러 설치
- 예제 1.1 메시지 출력
- Dev-C++ 환경을 사용할 경우
- 마이크로소프트 사의 비주얼 스튜디오를 사용할 경우
- 동작 방법
- 연습문제
- 칼럼: #include와 using이 무엇인가?
- 다음 출력 행으로 줄 바꿈
- 예제 1.2 여러 줄 출력
- 동작 방법
- 연습문제
- 칼럼: 문자열이란 무엇인가?
- 데이터 저장하기: C++ 변수
- 데이터형 소개
- 칼럼: 왜 한 배가 아니라 두 배인가?
- 예제 1.3 기온 변환
- 동작 방법
- 프로그램 최적화
- 연습문제
- 변수 이름과 키워드에 관한 몇 가지
- 연습문제
- 정리
- 프로그래머처럼 생각하기
- 2장 결정, 결정
- 데이터형에 대한 몇 가지 더
- 프로그램에서의 결정
- 칼럼: 인공 지능(AI, artificial interlligence)이란 무엇인가?
- if와 if-else
- 칼럼: 왜 두 연산자(= 와 ==)를 사용하는가?
- 예제 2.1 홀수 혹은 짝수?
- 동작 방법
- 코드 최적화
- 연습문제
- 루프 소개
- 칼럼: 무한 루프
- 예제 2.2 1에서부터 N까지 출력
- 동작 방법
- 프로그램 최적화
- 연습문제
- C++에서 참 혹은 거짓
- 칼럼: 불리언 데이터형
- 증가 연산자(++)
- 명령문과 표현식
- 불리언(지름길) 논리 소개
- 칼럼: 무엇이 ‘참’인가?
- 예제 2.3 나이 검사
- 동작 방법
- 연습문제
- 수학 라이브러리 소개
- 예제 2.4 소수 검사
- 동작 방법
- 프로그램 최적화
- 연습문제
- 예제 2.5 빼기 게임(NIM)
- 동작 방법
- 연습문제
- 정리
- 3장 간편한 다용도 ‘for’ 명령문
- 카운트를 위한 루프
- ‘for’ 루프 소개
- 수많은 예제
- 칼럼: ‘for’는 항상 ‘while’처럼 동작하는가?
- 예제 3.1 ‘for’를 사용해 1에서부터 N까지 출력
- 동작 방법
- 연습문제
- for에서 복합 명령문(블록) 사용
- 즉석에서 루프 변수 선언
- 예제 3.2 ‘for’를 사용한 소수 검사
- 동작 방법
- 연습문제
- 비교 언어 101: 베이직의 ‘For’명령문
- 정리
- 4장 함수: 많은 것을 호출
- 함수의 개념
- 함수 사용의 기본
- 단계 1: 함수 선언(프로토타입)
- 단계 2: 함수 정의
- 단계 3: 함수 호출
- 예제 4.1 avg() 함수
- 동작 방법
- 함수가 함수를 호출!
- 연습문제
- 예제 4.2 소수 함수
- 동작 방법
- 연습문제
- 지역 변수와 전역 변수
- 칼럼: 왜 전역 변수를 사용할까?
- 재귀 함수
- 예제 4.3 인수 분해
- 동작 방법
- 칼럼: 수학쟁이를 위한 칼럼
- 연습문제
- 예제 4.4 최대 공약수를 구하는 유클리드의 알고리즘
- 동작 방법
- 칼럼: 유클리드가 누구지?
- 연습문제
- 칼럼: 수학쟁이를 위한 칼럼: 증명의 나머지 부분
- 예제 4.5 아름다운 재귀, 하노이의 탑
- 동작 방법
- 연습문제
- 예제 4.6 난수 생성기
- 동작 방법
- 연습문제
- 게임과 추가 게임
- 정리
- 5장 배열: 모두 한 줄에
- C++ 배열 들여다보기
- 배열 초기화
- 0으로 시작하는 인덱스
- 칼럼: 왜 0으로 시작하는 인덱스를 쓰는가?
- 예제 5.1 요소 출력
- 동작 방법
- 연습문제
- 예제 5.2 난수는 얼마나 무작위일까?
- 동작 방법
- 연습문제
- 문자열과 문자열의 배열
- 예제 5.3 첫 번째 카드 돌리기
- 동작 방법
- 연습문제
- 두 번째 카드 돌리기
- 동작 방법
- 연습문제
- 예제 5.5 세 번째 카드 돌리기
- 동작 방법
- 프로그램 최적화
- 연습문제
- 지혜로운 한마디
- 2차원 배열: 행렬로 한 걸음
- 정리
- 6장 포인터: 데이터를 처리할 손잡이
- 포인터가 뭔데?
- 포인터의 개념
- 칼럼: 주소는 어떻게 생겼는가?
- 포인터 선언과 사용
- 예제 6.1 주소 출력
- 예제 6.2 double_it 함수
- 동작 방법
- 연습문제
- 교환: 포인터를 사용하는 또 다른 함수
- 예제 6.3 배열 정렬
- 동작 방법
- 연습문제
- 포인터 연산
- 포인터와 배열 처리
- 예제 6.3 배열을 0으로 초기화
- 동작 방법
- 좀 더 간결한 코드 작성
- 연습문제
- 정리
- 7장 문자열: 텍스트 분석
- 컴퓨터 내의 텍스트 저장소
- 칼럼: 컴퓨터는 프로그램을 어떻게 번역하는가?
- 문자열이 없다면 아무 뜻도 없다
- 문자열 조작 함수
- 예제 7.1 문자열 생성
- 동작 방법
- 연습문제
- 칼럼: 이스케이프 문자열이란 무엇인가?
- 문자열 입력 읽기
- 예제 7.2 숫자 얻기
- 동작 방법
- 연습문제
- 예제 7.3 대문자로 변환
- 동작 방법
- 연습문제
- 개별 문자와 문자열
- 예제 7.4 strtok으로 입력 값 자르기
- 동작 방법
- 연습문제
- 새로운 C++ 문자열 데이터형
- String 클래스 지원 포함
- string으로 변수 선언과 초기화
- string형 변수로 작업
- 입력과 출력
- 예제 7.5 string형을 사용해 문자열 생성
- 동작 방법
- 연습문제
- string 클래스가 지원하는 기타 연산
- 정리
- 컴퓨터 내의 텍스트 저장소
- 8장 파일: 전자적 저장소
- 파일 스트림 객체 소개
- 디스크 파일을 참조하는 방법
- 예제 8.1 파일에 글쓰기
- 동작 방법
- 연습문제
- 예제 8.2 텍스트 파일 출력
- 동작 방법
- 연습문제
- 텍스트 파일과 바이너리 파일
- 칼럼: ‘바이너리 파일’들은 진짜로 바이너리일까?
- 바이너리 연산 소개
- 예제 8.3 무작위 접근 쓰기
- 동작 방법
- 연습문제
- 예제 8.4 무작위 접근 읽기
- 동작 방법
- 연습문제
- 정리
- 9장 고급 프로그래밍 기술
- 커맨드라인 인자
- 예제 9.1 커맨드라인에서 입력받은 파일 출력
- 동작 방법
- 프로그램 개선
- 칼럼: 미리 정의된 상수의 아름다움
- 연습문제
- 함수 오버로딩
- 칼럼: 오버로딩과 객체지향
- 예제 9.2 다른 데이터형을 갖는 배열 출력
- 동작 방법
- 연습문제
- do-while 루프
- switch-case 명령문
- 다중 모듈
- 예외 처리: 예외가 있습니다!
- 예외의 기초
- 예외 처리: 첫 번째 시도
- try-catch 예외 처리 소개
- 정리
- 커맨드라인 인자
- 10장 C++11의 새로운 기능
- C++11 기능의 개요
- long long형(long long long은 아님)
- 칼럼: 왜 ‘자연’ 정수인가?
- 64비트 리터럴(상수) 사용
- long long형으로 입력받기
- long long 숫자 보기 좋게 출력
- 예제 10.1 피보나치: 64비트 예제
- 동작 방법
- 연습문제
- 숫자 현지화
- 칼럼: 피보나치가 누굴까?
- 범위 기반 ‘for’
- 예제 10.2 범위 기반 ‘for’로 배열 초기화
- 동작 방법
- 연습문제
- auto와 decltype 키워드
- nullptr 키워드
- 강한 데이터형 열거형
- C++11에서 enum 클래스
- 확장된 열거형 문법: 저장소 제어
- 예제 10.3 가위 바위 보 게임
- 동작 방법
- 더 재미있는 게임
- 연습문제
- 원 문자열 리터럴
- 정리
- 11장 클래스 소개: 분수 클래스
- 객체지향: 유사 지능 데이터형
- 칼럼: OOP…… 그만한 가치가 있나요?
- Point: 간단한 클래스
- 칼럼: C 프로그래머를 위한 칼럼: 구조체와 클래스
- private: 멤버들만 접근 가능(데이터 보호)
- 예제 11.1 Point 클래스 검사
- 동작 방법
- 연습문제
- Fraction 클래스 소개
- 인라인 함수
- 최대공약수 찾기
- 최소공배수 찾기
- 예제 11.2 분수를 지원하는 함수
- 동작 방법
- 연습문제
- 예제 11.3 Fraction 클래스 검사
- 동작 방법
- 칼럼: 새로운 #include 방식?
- 연습문제
- 예제 11.4 분수 연산: 뎃셈과 곱셈
- 동작 방법
- 연습문제
- 정리
- 객체지향: 유사 지능 데이터형
- 12장 생성자: 그걸 만든다면……
- 생성자 소개
- 다중 생성자(오버로딩)
- C++11만 지원: 클래스 내에서 멤버 초기화
- 기본 생성자: 그리고 경고
- 칼럼: C++가 기본 생성자를 가지고 놀리는 거 아냐?
- C++11만 지원: 생성자 파견? 위임?
- C++11만 지원: 일관된 초기화
- 예제 12.1 Point 클래스 생성자
- 동작 방법
- 연습문제
- 예제 12.2 분수 클래스 생성자
- 동작 방법
- 연습문제
- 참조 변수와 인자(&)
- 복사 생성자
- 칼럼: 복사 생성자와 참조자
- 예제 12.3 분수 클래스 복사 생성자
- 동작 방법
- 연습문제
- 문자열에서 분수로 바꾸는 생성자
- 정리
- 13장 연산자 함수: 클래스 활용
- 클래스 연산자 함수 소개
- 전역 함수로서의 연산자 함수
- 참조자로 효율 높이기
- 예제 13.1 포인트 클래스 연산자
- 동작 방법
- 연습문제
- 예제 13.2 분수 클래스 연산자
- 동작 방법
- 코드 최적화
- 연습문제
- 기타 데이터형과 함께 사용
- 클래스 할당 함수(=)
- 같은지 비교 함수(==)
- 클래스 ‘출력’ 함수
- 예제 13.3 최종 분수 클래스
- 동작 방법
- 연습문제
- C++11만 지원: 사용자 정의 리터럴
- 원 문자열 리터럴 정의
- 준비된 리터럴 정의
- 정리
- 14장 동적 메모리와 문자열 클래스
- 동적 메모리: ‘new’ 키워드
- 객체와 ‘new’
- 여러 데이터 할당
- 칼럼: 메모리 할당과 관련된 문제 해결하기
- 예제 14.1 동적 메모리 사용
- 동작 방법
- 연습문제
- 클래스 소멸자
- 예제 14.2 간단한 문자열 클래스
- 동작 방법
- 연습문제
- ‘깊은’ 복사와 복사 생성자
- this 키워드
- 할당 연산자 다시 보기
- 결합 함수 작성
- 예제 14.3 최종 문자열 클래스
- 동작 방법
- 연습문제
- 정리
- 15장 완전한 OOP 예제 두 개
- 연결 리스트 소개
- 노드 설계
- 간단한 연결 리스트 구현
- 알파벳 순서 리스트
- 예제 15.1 이름을 알파벳 순서로 정렬
- 동작 방법
- 메모리 누수 처리
- C++11만 지원: 삭제를 위해 스마트 포인터 사용
- 칼럼: 재귀 호출과 반복 비교
- 연습문제
- 하노이의 탑, 애니메이션 추가
- mystack 클래스 설계
- mystack 클래스 사용
- 예제 15.2 움직이는 타워
- 동작 방법
- 연습문제
- 정리
- 연결 리스트 소개
- 16장 STL을 사용한 손쉬운 프로그래밍
- 리스트 템플릿 소개
- 칼럼: C++에서 템플릿 작성하기
- 리스트 클래스 생성과 사용
- 반복자 작성과 사용
- C++11만 지원: for each
- 칼럼: 포인터와 반복자
- 예제 16.1 STL 정렬된 리스트
- 동작 방법
- 지속적으로 정렬돼 있는 리스트
- 연습문제
- RPN 계산기 설계
- 칼럼: 폴란드식 표기법에 대한 간단한 역사 이야기
- RPN을 위해 스택 사용
- 일반화된 STL 스택 클래스 소개
- 예제 16.2 역폴란드 계산기
- 동작 방법
- 연습문제
- 꺾쇠의 올바른 해석
- 정리
- 리스트 템플릿 소개
- 17장 상속: 물려받은 것들
- 하위 클래스를 만드는 방법
- 칼럼: 왜 ‘공용(public)’ 기본 클래스인가?
- 예제 17.1 FloatFraction 클래스
- 동작 방법
- 연습문제
- FloatFraction 클래스에서의 문제
- C++11만 지원: 기본 클래스 생성자 상속
- 예제 17.2 완전한 FloatFraction 클래스
- 동작 방법
- 연습문제
- 보호받는 멤버
- 객체 포함
- 클래스 계층 구조를 통한 안전한 상속
- 정리
- 하위 클래스를 만드는 방법
- 18장 다형성: 객체 독립성
- FloatFraction 클래스에 대한 다른 접근 방법
- 우리를 구원해줄 가상 함수!
- 칼럼: 가상 함수를 쓰는 비용은?
- 예제 18.1 수정된 FloatFraction 클래스
- 동작 방법
- 연습문제
- C++11만 지원: 명시적 오버라이딩 요구
- ‘순수 가상’과 기타 추상화 관련 사항
- 추상 클래스와 인터페이스
- 객체지향과 I/O
- 끝없이 확장 가능한 cout
- 다형적이지 않은 cout
- 예제 18.2 진짜 다형성: Printable 클래스
- 동작 방법
- 연습문제
- 마지막 한마디(혹은 두 마디)
- 진짜 마지막 한마디
- 정리
- 부록 A 연산자
- 영역(::) 연산자
- sizeof 연산자
- 데이터형을 변환하는 오래된 방법과 새로운 방법
- 정수형과 부동소수점 나눗셈
- 비트 단위 연산자(&, /, ^,~, <<, >>)
- 조건 연산자
- 할당 연산자
- 연결(,) 연산자
- 부록 B 데이터형
- 데이터형의 정밀도
- 숫자 리터럴의 데이터형
- 문자열 리터럴과 이스케이프 문자열
- 부호가 있는 정수를 위한 2의 보수 표기법
- 부록 C 문법 요약
- 기본 표현식 문법
- 기본 명령문 문법
- 제어 구조와 분기(branch) 명령문
- if-else 명령문
- while 명령문
- do-while 명령문
- for 명령문
- switch-case 명령문
- break 명령문
- continue 명령문
- goto 명령문
- return 명령문
- throw 명령문
- 변수 선언
- 함수 선언
- 클래스 선언
- 열거형 선언
- 부록 D 전처리 지시어
- #define 지시어
- ## 연산자(결합)
- defined 함수
- #elif 지시어
- #endif 지시어
- #error 지시어
- #if 지시어
- #ifdef 지시어
- #ifndef 지시어
- #include 지시어
- #line 지시어
- #undef 지시어
- 미리 정의된 상수
- 부록 E ASCII 코드
- 부록 F 표준 라이브러리 함수
- 문자열(C 문자열) 함수
- 데이터 변환 함수
- 단일 문자 함수
- 수학 함수
- 난수 관련 함수
- 시간 관련 함수
- strftime 함수를 위한 형식
- 부록 G I/O 스트림 객체와 클래스
- 콘솔 스트림 객체
- I/O 스트림 조작기
- 입력 스트림 함수
- 출력 스트림 함수
- 파일 I/O 함수
- 부록 H STL 클래스와 객체
- STL 문자열 클래스
- <list> 템플릿
- <stack> 템플릿
도서 오류 신고
정오표
정오표
1쇄 오류/오탈자
[ p93 예제 2.5 9행 ]
1을 → 2를
[ p93 예제 2.5 12행 ]
2일 때 → 3일 때
[ p603 ]
들어가며 → 찾아보기
[ p. 271 2행 ]
다중 모듈을 사용gkaus 작업을 → 다중 모듈을 사용할 경우