- 제1장 C++ 첫걸음
1장에서는 C 언어의 객체 지향 프로그래밍 기법을 추가하여
C++ 프로그래밍 언어를 만들게 된 역사적인 과정을 알아본다.
여기서는 C와 같은 절차적 언어와
C++와 같은 객체 지향 언어의 차이를 설명하며,
C++ 표준을 개발히기 위한 ANSI/ISO의 협력에 대하여 설명,
C++ 프로그램을 작성하는 방법을 설명,
현재 시점에서 사용할 수 있는
여러가지 C++ 컴파일러들에 대하여 요약하며,
마지막으로 이 책에서 사용된 표기법을 설명한다.
- 제2장 C++ 시작하기
2장에서는 C++ 프로그램을 작성하는 과정을 알아본다.
main () 함수의 역할과 C++ 프로그램이 사용하는 몇 가지 구문들에 대해 배운다.
프로그램의 입출력을 위해 미리 정의되어 있는 cout과 cin 객체를 사용해 보그
변수를 작성하고 사용하는 방법에 대해 배운다.
마지막으로 C++의 프로그래밍 모듈인 함수를 소개한다.
- 제3장 데이터 처리
C++는 두 가지 종류의 데이터,
즉 소수점이 없는 정수와
소수점이 있는 부동 소수점수를
저장하기 위한 내장 데이터형을 제공한다.
프로그래머의 다양한 요구에 부응하기 위해
C++는 각 범주마다 여러 가지 데이터형을 제공한다.
3장은 여러 유형의 변수와 상수의 작성을 포함하여,
이러한 여러 가지 데이터형에 대해 설명한다.
또한 C++가 한 데이터형을 다른 데이터형으로
암시적으로 또는 명시적으로 변환하는 방법에 대하여 설명한다.
- 제4장 복합 데이터형
C++에서는 기본적인 내장 데이터형을 이용하여
더욱 정교한 데이터형을 구성할 수 있다.
가장 높은 수준의 데이터형은 9, 10, 11, 12, 13 장에서 설명하는 클래스이다.
4장에서는 한 가지 데이터형의 여러 값을 연속적으로 보관하는 배열과,
서로 다른 데이터형의 여러 값을 한 덩어리로 묶어서 보관하는 구조체,
메모리 내에서의 위치를 지시하는 포인터 등을 설명한다.
또한 텍스트 문자열을 작성하고 보관하는 방법과,
C 스타일의문자 배열과 C++의 string 클래스를 사용하여
텍스트를 입력하고 출력하는 방법을 배운다.
마지막으로 메모리를 관리하는 new와 delete 연산자 등을 이용하여
C++가 메모리 대입을 처리하는 방법을 배운다.
- 제5장 루프와 관계식
프로그램은 반복적인 작업을 자주 수행해야 한다.
C++는 이 목적을 위해 세 가지의 순환 구조를 제공한다.
for 루프, while 루프, do while 루프가 그것이다.
이러한 루프들은 순환을 언제 끝내야 하는지 알고 있어야 한다.
C++의 관계 연산자를 이용하여 종료 조건을 테스트함으로써
루프를 안전하게 제어할 수 있다.
5장에서는 문자를 하나씩 읽어 들여 입력을 처리하는 루프를 배운다.
마지막으로 2차원 배열을 작성하는 방법과, 중첩 루프를 사용하여
2차원 배열을 처리하는 방법을 배운다.
- 제6장 분기 구문과 논리 연산자
상황에 따라 다른 작업을 처리하는 프로그램은 매주 지능적으로 행동할 수 있다.
6장에서는 if, else, switch 구문과 조건 연산자를 사용하여
프로그램의 흐름을 제어하는 방법을 배운다.
논리 연산자를 사용하여
의사 결정 조건을 효과적으로 표현하는 방법을 배운다.
그리고 어떤 문자가 숫자인지 아니면 인쇄할 수 없는
특수 문자인지 등을 테스트하는 작업과 같이,
문자에 관련된 사항을 평가하는 cctyp 함수 라이브러리를 소개한다.
마지막으로, 파일 입출력에 대해 간단하게 소개한다.
- 제7장 함수 - C++의 프로그래밍 모듈
함수는 C++ 프로그램의 기본 구성 단위이다.
7장에서는
C++ 함수와 C 함수의 공통적인 사항을 중점적으로 설명한다.
함수를 정의하는 형식을 검토한 후,
함수 원형이 프로그램의 신뢰성을 어떻게 높이는지 알아본다.
또한 배열, 문자열, 구조체를 처리하는 함수를 작성하는 방법을 배운다.
그리고 함수가 스스로를 호출하는 재귀 호출에 대해서 배우고,
재귀 호출을 이용하여 분할 정복 전략을 구현하는 방법을 알아본다.
마지막으로 함수 매개변수를 통해 함수가 다른 함수를
사용할 수 있게 해 주는 함수 포인터에 대하여 소개한다.
- 제8장 함수의 활용
8장에서는 C++ 함수에 새로 추가된 기능들을 살펴본다.
프로그램의 크기는 약간 커지지만 대신
실행 속도를 높일 수 있는 인라인 함수에 대해 배운다.
또한 함수에 다른 방식으로 정보를 전달하는 참조 변수에 대해 배운다.
함수를 호출할 때 매개변수 값을 생략하면
디폴트 매개변수 값이 자동으로 함수에 전달된다.
함수 오버로딩을 사용하면 같은 이름의 함수를 여러 번 만들 수 있다.
그러나 이때 매개변수 리스트는 다르게 표현해줘야 한다.
이러한 모든 기능들은 클래스를 설계할 때 자주 사용된다.
또한 서로 관련된 한 무리의 함수들을 설계하는 데
사용하는 함수 템플릿에 대해서 배운다.
- 제9장 메모리 모델과 이름 공간
9장에서는
여러 개의 파일로 이루어진 프로그램을 다루는 방법을 배운다.
메모리를 관리하는 여러 가지 방법과,
프로그램의 구성 단위들이
어떤 변수에 대해 알고 있는지를 결정하는
사용 범위, 링크, 이름 공간 등을 살펴봄으로써
프로그래머가 선택할 수 있는 몇가지 메모리 대입 방법을 조사한다.
- 제10장 객체와 클래스
클래스는 사용자 정의 데이터형이다.
(변수와 같은) 어떤 객체는 클래스가 구체화 된 것이다.
10장에서는 객체 지향 프로그래밍과 클래스 설계에 대해 소개한다.
클래스 선언은 클래스 객체에 저장되는 정보와
클래스 객체에 허용되는 연산(클래스 메서드)들을 정의한다.
객체의 일부는 바깥 세계에서 볼 수 있으나(public 부분),
일부는 객체 안에 은닉되어 있다 (private 부분).
객체가 생성되고 파괴될 때에는
특수한 글래스 메서드(생성자와 파괴자) 가 활동한다.
이러한 사항과 클래스이 다른 세부 사항들을 이 장에서 배우고 나면,
클래스를 사용하여 스택과 같은 추상화
데이터형(ADT)을 구현하는 방법을 알게 된다.
- 제11장 클래스의 활용
11장에서 클래스에 대해 좀 더 깊이 들어간다.
먼저 연산자 오버로딩에 대해 배운다.
연산자 오버로딩을 통해 +와 같은 연산자를 사용하여
클래스 객체를 다루는 방법을 정의할 수 있다.
일반적으로 바깥 세계에서 접근할 수 없는 클래스 데이터에
접근이 가능한 프렌드 함수에 대해서 배운다.
그리고 생성자와 오버로딩된 연산자 멤버 함수를 사용하여
클래스형과 관련된 데이터형 변환을 처리하는 방법을 소개한다.
- 제12장 클래스와 동적 메모리 대입
클래스 멤버에 동적으로 메모리를 대입하면 유용할 떄가 많다.
동적 메모리를 대입하기 위해 클래스 생성자에 new를 사용하려면,
이에 대응하는 적절한 파괴자를 제공해야 하고,
명시적인 복사 생성자와 대입 연산자도 정의해야 한다.
12장에서는 그렇게 하는 방법을 설명한다.
또한, 명시적인 정의를 제공하지 않았을 때 암시적으로
발생하는 멤버 함수의 행동에 대해서 논의한다.
그리고 객체 포인터를 사용하여 큐 시뮬레이션 문제를
연구함으로써 클래스에 대한 독자의 이해를 돕는다.
- 제13장 클래스의 상속
객체 지향 프로그래밍의 가장 강력한 특징 중의 하나가 상속이다.파생 클래스는 상속을 통해 기초 클래스로부터여러 가지 기능을 상속받게 되므로 기초 클래스이 코드를 재활용할 수 있다.13장에서는 is-a 관계를 구현하는 public 상속에 대해서 논의한다.여기서 is-a 관계란 파생 객체가 기초 객체의 한 특수한 경우라는 뜻이다.예를 들어, 물리학자는 과학자의 한 특수한 경우이다.어떤 상속 관계는 다형적이어서,동일한 메서드 이름으로 객체형에 따라다른 행동을 구현하도록 서로 관련된 클래스들을 혼합하여 코드를 작성할 수 있다.이러한 행동을 구현하려면 가상함수라는 새로운 종류의 멤버 함수를 사용해야 한다.때로는 추상화 기초 클래스가 이러한 상속 관계에 접근하는 최상의 방법이다.이 장에서는 이 문제를 공부하면서public 상속이 적절한 시기와 적절하지 않은 시기에 대해 설명한다.
- 제14장 C++ 코드의 재활용
public 상속은 코드를 재활용하는 한 가지 방법이다.14장에서는 코드를 재활용하는 다른 방법들을 알아본다.어떤 클래스가 다른 클래스의 객체를 멤버로 가지고 있으면 이를 컨테인먼트라 한다.컨테인먼트라를 사용하면 has-a 관계를 구현할 수 있다.이 장은 서로 다른 이러한 접근 방식들의 차이를 알아본다.그리고 데이터형을 지정하지 않은 포괄형으로 클래스를 정의한 후,구체적인 데이터형을 가진 구체적인 클래스를 만드는 클래스 템플릿에 대해 배운다.예를 들어, 스택 템플릿을 이용하면 정수 스택이나 문자열 스택을 만들 수 있다.마지막으로 둘 이상의 다른 클래스로부터 하나의 클래스를 파생시킬 수 있는다중 public 상속에 대해 배운다.
- 제15장 프렌드와 예외, 기타 사항
15장에서 프렌드 클래스와 프렌드 멤버 함수를 통해 프렌드에 대해 좀 더 깊이 들어간다.
그리고 C++에 새로 추가된 여러 가지 기능을 살펴본다.
먼제 예외에 대해 알아본다.
예외는 부적절한 함수 매개변수 값이나 메모리 부족 등 특이한 프로그램 에러를 처리한다.
또한 객체형을 식별하는 RTTI(실행 시간 데이터형 정보)에 대해 공부하며,
마지막으로 무제한적인 데이터형 변환보다
훨씬 안전한 다른 데이터형 변환 방법에 대해 배운다.
- 제16장 string 클래스와 표준 템플릿 라이브러리
16장에서는 처근에 와서 C++에 추가된 유용한 클래스 라이브러리 몇 가지를 설명한다.
string 클래스는 전통적인 C 스타일의 문자열보다 편리하고 강력하다.
auto_ptr 클래스는 동적으로 대입된 메모리를 관리할 때 유용하다.
표준 템플릿 라이브러리 (STL)는 배열, 큐, 리스트, 집합, 맵 등의 템플릿과,
여러 가지 일반형 컨테이너를 제공한다.
그리고 STL 컨테이너와 보통의 배열에 사용할 수 있는
일반화 알고리즘의 효율적인 라이브러리를 제공한다.
valarray 템플릿 클래스는 수치 배열을 지원한다.
- 제17장 입력, 출력, 파일
17장에서는 C++의 입출력을 복습하고, 출력 형식을 지정하는 방법을 알아본다.
클래스 메서드를 사용하여 입력 스트림과 출력 스트림의 상태를 결정하는 방법과,
입력에 데이터형 불일치가 있는지, 파일 끝이 탐지되었는지 검사하는 방법을 알아본다.
C++는 상속을 사용하여 파일 입출력을 관리하는 클래스를 파생시킨다.
입력 파일이나 출력 파일을 여는 방법, 파일에 데이터를 추가하는 방법,
2진 파일을 사용하는 방법, 파일에 임의로 접근하는 방법 등을 배우며,
마지막으로 표준 입출력 메서드를 사용하여 문자열을 읽고 쓰는 방법을 배운다.
- 제18장 새로운 C++ 표준과 만남
18장은 이전의 장(chapter)에서 설명되었던 C++11에 새로이 추가된
여러 내용들 즉, 새로운 타입, 균일 초기화 구문, 자동 타입 유추, 새로운 스마트 포인터에 대해여
복습하는 것으로 시작하며, 범위가 지정된 열거 등의 내용을 담고 있다.
또한 r값 래퍼런스에 대해 언급하고, 이것이 move semantics라 불리는 새로운 기능을
시행하는 데 어떠게 사용되는지 알아본다.
그런 다음, 새로운 클래스 기능, 람다 구문과 변수를 지닌 템플릿 등의 내영을 다룬다.
마지막으로 이 책의 17장까지의 내용 중에서 다루지
않았던 많은 기능들에 대해여 간략히 소개한다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
main 함수의 머리 (0) | 2023.01.11 |
---|---|
인라인 함수 (0) | 2023.01.09 |
전처리 지시자 (0) | 2023.01.08 |
동적 할당 함수 (0) | 2023.01.07 |
c++ 함수의 특질 (0) | 2023.01.07 |