저 자 약 력이상정순천향대학교컴퓨터학부교수, sjlee@sch.ac.kr 조영일수원대학교컴퓨터학과교수, yicho@suwon.ac.kr 김은성순천향대학교전기전자공학과교수, eskim@sch.ac.kr 박종득공주대학교컴퓨터공학부교수, pjd@kongju.ac.kr
C++ 언어는 C 에 C 언어의증가연산자 ++ 를덧붙인 C++ 라는이름이의미하는바와같이 C 언어의문법을대부분그대로사용하면서객체지향프로그래밍기법을추가한 C 언어의확장판으로개발된언어이다. 객체지향프로그래밍은프로그램을단순히자료의처리흐름으로보는것이아니라인간이사물을생각하고이해하는방식과유사하게서로연관된객체들간의관계로정의하고프로그래밍하는기법이다. 지금까지객체지향프로그래밍을지원하는많은프로그래밍언어들이개발되었고, Java나 C# 등도이들중의하나지만, 많은객체지향프로그래밍언어들중에서 C++ 언어가가장풍부한기능을제공하면서널리사용되고있다. C 머 O 리 말 E S 이책은기존의 C 언어를학습한후에 C++ 언어를배우고자하는독자들을위하여만들어진책이다. 따라서기존의 C 언어에포함된중복된내용등은배제하고 C 언어에서확장된객체지향을지원하는개념및내용들을중심으로책의내용을구성하였다. C++ 언어는 C 언어의장점과특징을그대로유지하면서객체지향프로그래밍을위해다양하고풍부한기능을제공하는언어이기때문에다소어렵고처음접근하기에는쉽지않다. 따라서이책에서는언어의문법이나복잡한사양등의장황한설명은피하고간결한예제를중심으로해당기능의특징을빠르고쉽게이해할수있도록구성하였다. 그러나간결한예제는이해가쉬운반면에구체적인의미나내용을갖는완성된프로그램은아니어서프로그래밍활용기법을배우기에는다소부족하다. 따라서독자들의프로그래밍활용능력을높이고자각단원의끝에서는앞에서설명된 C++ 기능및예제들을응용한완성된프로그램을제시하였다. 이책에서소개된예제및응용예들은한단원에서끝나는것이아니라새로운단원에서새로운 C++ 기능을배울때앞의내용을보완하고확장된예를제시함으로써독자들이앞의내용과단절되지않고점진적으로추가된기능을학습하고활용할수있도록하였다. 각단원의끝에서는앞에서배운 C++ 언어의이해를측정하고프로그래밍연습을위해연습문제를제시하였다. 또한응용예를소개한후에는이를확장하고활용하는문제도제시한다. - iii -
프로그래밍 이책은모두 10개의단원으로구성되었다. 1장과 2장은 C++ 를시작하는소개단원이다. 1장에서는객체지향프로그래밍의기본개념을소개하고, 2장에서는객체지향프로그래밍기법을제외하고 C 언어에추가된기능을소개한다. 3장과 4장에서는객체지향프로그래밍을시작하는단원으로객체를정의하는클래스의선언과클래스의초기화를배운다. 5장, 6장, 7장은객체와클래스의고급기능으로연산자오버로딩, 클래스의상속, 템플릿등의개념과활용방법을배운다. 마지막으로 8장, 9장, 10장등에서는입출력, 표준템플릿라이브러리, 예외처리등을소개한다. 끝으로이책이 C++ 언어를배우고자하는독자들에게쉽고유익한길잡이가되었으면하는바람을가지면서이책이출간되기까지지원을아끼지않은 ( 주 ) 사이텍미디어관계자여러분께감사드린다. 2009년 2월저자씀 - iv -
프로그래밍 제1장 C++ 언어와객체지향프로그래밍소개 1 1.1 C++ 언어의특징 2 1.2 객체지향프로그래밍개발배경 3 1.3 객체지향프로그래밍기본개념 5 z 객체 5 x 클래스 6 c 추상자료형 7 v 상속 7 b 다형성 8 C O E S 제2장 C 언어의확장, C++ 11 2.1 스트림입출력연산자 12 2.2 변수, 부울자료형, 형변환 14 z 블록내변수선언 14 x 변수의사용범위지정연산자 15 c bool 자료형 16 v 명시적인형변환 17 2.3 열거형, 구조체, 공용체 19 2.4 함수 20 z 함수오버로딩 20 x 디폴트매개변수 23 c 인라인함수 25 2.5 참조자 26 z 참조자매개변수전달 28 x 참조자의반환 30 2.6 동적메모리할당과해제 31 2.7 이름공간 34 z using 선언문 36 x 표준라이브러리이름공간 38 2.8 응용예 39 z 성적관리프로그램버전 1 39 연습문제 47 - v -
프로그래밍 제3장클래스와객체 51 3.1 클래스정의 52 z 클래스선언형식 52 x 클래스명변수명1, 변수명2,...; 52 c 클래스멤버함수의선언 54 v 클래스멤버함수의외부정의 58 3.2 객체자료 61 z 객체복사 61 x 객체매개변수전달 63 c 객체반환 65 v 객체배열 67 b 객체포인터 68 n 객체참조자 70 3.3 구조체와공용체 72 3.4 응용예 74 z 성적관리프로그램버전 2 74 x 집합프로그램 79 연습문제 85 제4장클래스의초기화, 프렌드함수 89 4.1 생성자와소멸자 90 z 생성자 90 x 디폴트생성자 96 c 소멸자 98 v 디폴트소멸자 102 4.2 복사생성자 105 z 객체생성시 105 x 함수의매개변수로전달시복사생성자 109 c 함수의반환값으로객체를반환 112 4.3 프렌드함수 113 4.4 정적멤버 116 4.5 자기참조 119 4.6 응용예 123 - vi -
z 성적관리프로그램버전 3 123 x 연결리스트프로그램 129 연습문제 135 제5장연산자오버로딩 137 5.1 연산자오버로딩 138 z 이항연산자오버로딩 140 x 단항연산자오버로딩 145 C O E S 5.2 프렌드연산자함수 153 5.3 형변환함수 159 5.4 string 클래스 161 5.5 응용예 164 z 집합프로그램버전 2 164 x 이진수표현응용예 171 연습문제 179 제6장클래스의상속 181 6.1 파생클래스 182 z 보호부분의상속 185 6.2 생성자, 소멸자호출순서 188 z 베이스클래스생성자매개변수전달 190 6.3 가상함수 193 z 순수가상함수와추상클래스 195 6.4 다중상속 198 6.5 가상베이스클래스 204 6.6 응용예 206 z 성적관리프로그램버전 4 206 x 집합프로그램버전 3 213 연습문제 222 제 7 장템플릿 225 7.1 템플릿함수 226 z 템플릿함수정의및생성 226 - vii -
프로그래밍 x 템플릿함수의특수화 228 c 템플릿함수오버로딩 230 7.2 템플릿클래스 231 z 템플릿클래스정의및생성 231 x 템플릿클래스의특수화 237 c 디폴트템플릿매개변수 239 v 템플릿클래스의오버로딩 240 b 템플릿클래스의상속 241 7.3 응용예 245 z 집합프로그램버전 4 245 연습문제 253 제8장표준및파일입출력 255 8.1 스트림입출력 256 8.2 표준출력 258 z 출력클래스 ostream 258 x 사용자정의출력 259 8.3 표준입력 262 z 입력클래스 istream 262 x 사용자정의입력 263 8.4 형식지정입출력 266 z 입출력조절자 266 x setf() 와 unsetf() 함수 269 c 그밖의함수들 : width(), precision(), fill() 273 v 그밖의입출력조절자 276 b 사용자정의조절자 278 8.5 파일입출력 280 z 파일의개방 (open) 및종결 (close) 280 x 랜덤액세스 285 8.6 응용예 288 z 이진수표현프로그램버전 2 288 x 성적관리프로그램버전 5 292 연습문제 301 - viii -
제9장표준템플릿라이브러리 305 9.1 표준템플릿라이브러리컴포넌트 306 9.2 컨테이너 306 z 순차컨테이너 307 9.3 반복자 311 9.4 연상컨테이너 314 z 세트와멀티세트 314 x 맵과멀티맵 317 C O E S 9.5 알고리즘 319 z 범위 (ranges) 322 x 다중범위 323 연습문제 327 제10장예외처리 329 10.1 예외상황발생과처리 330 10.2 예외처리의예 333 z 다수의 try() 와 catch() 가있는경우 337 x 여러개의 catch 블록을사용하는경우 339 c 중첩 try 블록 343 v 예외를다시사출 345 10.3 응용예 347 z 스택의경계검사예 347 연습문제 351 찾아보기 352 - ix -