C++実践プログラミング 第2版

目次


監訳者まえがき 
はじめに

I部 基礎 

1章	C++とは何か
	1.1	C++の小史 
	1.2	C++プログラムの構造 
	1.3	C++の習得方法 
2章	プログラム記述の基礎
	2.1	プログラムの構想から実行まで 
	2.2	実際のプログラムの作成 
		2.2.1	コマンド行コンパイラによるプログラムの作成 
		2.2.2	IDEによるプログラムの作成 
	2.3	Unixのヘルプ 
	2.4	IDEのヘルプ 
	2.5	プログラミング実習 
3章	スタイル
	3.1	コメント 
	3.2	C++コード 
	3.3	命名規則 
	3.4	コーディング信奉 
	3.5	インデントとコードのスタイル 
	3.6	わかりやすさ 
	3.7	簡潔さ 
	3.8	一貫性と構成 
	3.9	参考文献 
	3.10	まとめ 
4章	基本的な宣言と式
	4.1	基本的なプログラム構造 
	4.2	簡単な式 
	4.3	std::cout出力オブジェクト 
	4.4	変数と記憶域 
	4.5	変数宣言 
	4.6	整数 
	4.7	代入文 
	4.8	浮動小数点数 
	4.9	浮動小数点数の除算と整数の除算 
	4.10	文字 
	4.11	ワイド文字 
	4.12	ブール型 
	4.13	プログラミング実習 
	4.14	設問の解答 
5章	配列、修飾子、数値の使用
	5.1	配列 
	5.2	文字列 
		5.2.1	ワイド文字列 
	5.3	データの入力 
	5.4	変数の初期化 
		5.4.1	範囲外エラー 
	5.5	多次元配列 
	5.6	Cの文字列 
		5.6.1	安全性とCの文字列 
		5.6.2	Cの文字列の読み取り 
		5.6.3	Cの文字列とC++の文字列との変換 
		5.6.4	C++の文字列とCの文字列との違い 
	5.7	整数型 
		5.7.1	整数型のまとめ 
	5.8	浮動小数点数型 
	5.9	定数の宣言と参照型の宣言 
	5.10	修飾子 
		5.10.1	スペシャル 
		5.10.2	定数 
		5.10.3	記憶クラス 
		5.10.4	サイズ 
		5.10.5	符号 
		5.10.6	型 
	5.11	16進数と8進数 
	5.12	簡略用の演算子 
	5.13	副作用 
	5.14	プログラミング実習 
	5.15	設問の解答 
6章	条件文と制御文
	6.1	if文 
	6.2	else文 
	6.3	std::strcmpの不適切な使い方 
	6.4	ループ文 
	6.5	while文 
	6.6	break文 
	6.7	continue文 
	6.8	どこでも代入できることの副作用 
	6.9	プログラミング実習 
	6.10	設問の解答 
7章	プログラミングの手順
	7.1	作業領域のセットアップ 
	7.2	仕様書 
	7.3	コードの設計 
	7.4	プロトタイプ 
	7.5	Makefile 
	7.6	テスト 
	7.7	デバッグ 
	7.8	保守 
	7.9	リビジョン 
	7.10	電子的考古学 
	7.11	プログラムの注釈付け 
	7.12	デバッガの利用 
	7.13	テキストエディタのブラウザ的な使用 
	7.14	コメントの追加 
	7.15	プログラミング実習 

II部 シンプルなプログラミング

8章	ほかの制御文
	8.1	for文 
	8.2	switch文 
	8.3	switch、break、continue 
	8.4	プログラミング実習 
	8.5	設問の解答 
9章	変数のスコープと関数
	9.1	スコープと記憶クラス 
		9.1.1	forのスコープ 
	9.2	名前空間 
		9.2.1	名前空間std 
		9.2.2	グローバル名前空間 
		9.2.3	ファイル固有の名前空間 
		9.2.4	ネストした名前空間 
		9.2.5	using文 
	9.3	関数 
		9.3.1	voidの戻り値 
		9.3.2	名前空間と関数 
		9.3.3	constの引数と戻り値 
		9.3.4	参照型の引数と戻り値 
		9.3.5	ダングリング参照 
		9.3.6	配列型の引数 
		9.3.7	関数のオーバーロード 
		9.3.8	デフォルトの引数 
		9.3.9	使用されない引数 
		9.3.10	インライン関数 
	9.4	引数型のまとめ 
	9.5	再帰 
	9.6	構造化プログラミングの基礎 
	9.7	現実のプログラミング 
	9.8	プログラミング実習 
	9.9	設問の解答 
10章	C++プリプロセッサ
	10.1	#define文 
		10.1.1	#defineとconst 
	10.2	条件付きコンパイル 
	10.3	#includeファイル 
	10.4	パラメータをとるマクロ 
		10.4.1	#演算子 
		10.4.2	パラメータをとるマクロとインライン関数 
	10.5	高度な機能 
	10.6	まとめ 
	10.7	プログラミング実習 
	10.8	設問の解答 
11章	ビット演算
	11.1	ビット演算子 
	11.2	&演算子 
	11.3	|演算子 
	11.4	^演算子 
	11.5	~演算子 
	11.6	<<演算子、>>演算子 
		11.6.1	右シフトの詳細 
	11.7	ビットのセット、クリア、評価 
	11.8	ビットマップグラフィックス 
	11.9	プログラミング実習 
	11.10	設問の解答 

III部 高度な型とクラス

12章	高度な型
	12.1	構造体 
	12.2	共用体 
	12.3	typedef 
	12.4	列挙 
	12.5	ビットフィールドとパックした構造体 
	12.6	構造体の配列 
	12.7	プログラミング実習 
	12.8	設問の解答 
13章	シンプルなクラス
	13.1	スタック 
		13.1.1	スタックの設計 
	13.2	改良されたスタック 
	13.3	クラスの使用 
	13.4	コンストラクタとデストラクタ 
		13.4.1	デストラクタ 
		13.4.2	引数をとるコンストラクタ 
		13.4.3	引数をとるデストラクタ 
		13.4.4	コピーコンストラクタ 
	13.5	自動的に生成されるメンバ関数 
		13.5.1	自動的に生成され、使用される関数 
		13.5.2	明示的なコンストラクタ 
	13.6	ショートカット 
	13.7	スタイル 
	13.8	構造体とクラス 
	13.9	プログラミング実習 
14章	クラス − その2
	14.1	フレンド 
		14.1.1	フレンド関数 
		14.1.2	フレンドクラス 
	14.2	定数に使用できる関数 
	14.3	定数メンバ 
	14.4	静的なメンバ変数 
	14.5	静的なメンバ関数 
	14.6	staticの意味 
	14.7	プログラミング実習 
15章	シンプルなポインタ
	15.1	定数ポインタ 
	15.2	ポインタと出力 
	15.3	ポインタと配列 
		15.3.1	Cの文字列の分割 
	15.4	reinterpret_cast 
	15.5	ポインタと構造体 
	15.6	コマンド行引数 
	15.7	プログラミング実習 
	15.8	設問の解答

IV部 高度なプログラミング概念

16章	ファイル入出力
	16.1	C++のファイルI/O 
		16.1.1	Cの文字列の読み取り 
		16.1.2	出力ファイル 
	16.2	変換ルーチン 
	16.3	バイナリファイルとASCIIファイル 
	16.4	EOLの不思議 
	16.5	バイナリI/O 
	16.6	バッファリングの問題 
	16.7	バッファを使用しないI/O 
	16.8	ファイルフォーマットの設計 
	16.9	CのI/Oルーチン 
	16.10	Cの変換ルーチン 
		16.10.1	std::printfファミリの出力関数 
		16.10.2	std::scanfファミリの入力関数 
	16.11	CのバイナリI/O 
	16.12	CのI/OとC++のI/O 
		16.12.1	単純さ 
		16.12.2	信頼性 
		16.12.3	速さ 
		16.12.4	どちらを使用すべきか 
	16.13	プログラミング実習 
	16.14	設問の解答 
17章	デバッグと最適化
	17.1	コードレビュー 
		17.1.1	レビューの計画 
		17.1.2	レビューミーティング 
		17.1.3	コードレビューをしないわけ 
		17.1.4	判断基準 
	17.2	シリアルデバッグ 
		17.2.1	分割統治 
		17.2.2	告白方式によるデバッグ 
		17.2.3	デバッグ専用コード 
		17.2.4	デバッグ用のコマンド行スイッチ 
	17.3	出力のチェック 
	17.4	対話型デバッガ 
		17.4.1	基本的なデバッグコマンド 
		17.4.2	簡単なプログラムのデバッグ 
	17.5	二分検索のデバッグ 
		17.5.1	最初のバグ − セグメンテーションフォールト 
		17.5.2	予想外の無限ループ 
	17.6	対話型デバッグのヒント 
	17.7	実行時エラー 
	17.8	最適化 
		17.8.1	プロファイリング 
		17.8.2	コードの分析と最適化 
		17.8.3	レジスタの宣言 
		17.8.4	システムライブラリの使用 
	17.9	最適化の手法 
	17.10	ケーススタディ:インライン関数と通常の関数 
	17.11	ケーススタディ:カラーレンダリングアルゴリズムの最適化 
	17.12	プログラミング実習 
	17.13	設問の解答 
18章	演算子のオーバーロード
	18.1	簡単な固定小数点クラスの作成 
		18.1.1	固定小数点数の基礎 
		18.1.2	fixed_ptクラスの作成 
	18.2	演算子関数 
		18.2.1	二項算術演算子 
		18.2.2	関係演算子 
		18.2.3	単項演算子 
		18.2.4	複合演算子 
		18.2.5	インクリメント演算子とデクリメント演算子 
		18.2.6	論理演算子 
		18.2.7	I/O演算子 
		18.2.8	インデックス演算子 
		18.2.9	newとdelete 
		18.2.10	めったに使わない演算子 
	18.3	メンバ関数としての演算子 
		18.3.1	キャスト 
	18.4	問題点 
	18.5	固定小数点クラスの完全な定義 
	18.6	プログラミング実習 
	18.7	設問の解答 
19章	浮動小数点
	19.1	浮動小数点フォーマット 
	19.2	加算と減算 
	19.3	乗算と除算 
	19.4	オーバーフローとアンダーフロー 
	19.5	丸め誤差 
	19.6	精度 
	19.7	丸め誤差の最小化 
	19.8	精度の決定 
	19.9	精度と速度 
	19.10	べき級数 
	19.11	プログラミング実習 
20章	高度なポインタ
	20.1	ポインタ、構造体、クラス 
	20.2	delete演算子 
	20.3	リンクリスト 
	20.4	順序付きのリンクリスト 
	20.5	二重リンクリスト 
	20.6	ツリー 
	20.7	ツリーの出力 
	20.8	プログラムの残りの部分 
	20.9	チェスプログラムのデータ構造 
	20.10	プログラミング実習 
	20.11	設問の解答 
21章	高度なクラス
	21.1	派生クラス 
	21.2	仮想関数 
	21.3	仮想クラス 
	21.4	派生クラスに隠ぺいされた関数 
	21.5	派生クラスのコンストラクタとデストラクタ 
	21.6	dynamic_cast演算子 
	21.7	まとめ 
	21.8	プログラミング実習 
	21.9	設問の解答

V部 言語のその他の機能 

22章	例外
	22.1	スタック例外 
		22.1.1	例外の作成 
		22.1.2	tryブロックによる通常の例外の処理 
		22.1.3	例外のスロー 
		22.1.4	例外とデストラクタ 
	22.2	例外とアサート 
	22.3	プログラミング実習 
23章	モジュールプログラミング 
	23.1	モジュール 
	23.2	パブリックとプライベート 
	23.3	extern記憶クラス 
	23.4	ヘッダ 
	23.5	モジュールの本文 
	23.6	無限配列を使用するプログラム 
	23.7	複数ファイルのMakefile 
	23.8	無限配列の使用 
	23.9	タスクのモジュール化 
	23.10	モジュール設計のガイドライン 
	23.11	プログラミング実習 
24章	テンプレート
	24.1	テンプレートとは 
	24.2	テンプレート:めんどうな方法 
	24.3	テンプレート:C++の方法 
	24.4	関数の特殊化 
	24.5	クラステンプレート 
	24.6	クラスの特殊化 
	24.7	実装の詳細 
		24.7.1	現実のテンプレート 
		24.7.2	コードを生成する状況 
		24.7.3	可搬性のあるテンプレートの作成 
	24.8	高度な機能 
		24.8.1	デフォルトパラメータ 
		24.8.2	部分的な特殊化 
	24.9	まとめ 
	24.10	プログラミング実習 
25章	STL
	25.1	STLの基礎 
		25.1.1	コンテナ 
		25.1.2	反復子 
		25.1.3	アルゴリズム 
	25.2	クラス名簿 − 生徒のセット 
		25.2.1	セットの反復処理 
		25.2.2	std::for_eachによるセットの書き出し 
		25.2.3	マルチセット 
	25.3	STLリストによるキャンセル待ちリストの作成 
	25.4	STLマップによる成績表の管理 
	25.5	クラスの作成 
	25.6	STLを使用する際の注意点 
		25.6.1	正しく入力すること 
		25.6.2	エラーメッセージ 
	25.7	詳細情報の入手先 
	25.8	プログラミング実習 
26章	プログラムの設計
	26.1	設計目標 
	26.2	設計要素 
	26.3	設計原則 
	26.4	コーディング 
		26.4.1	プロシジャの設計 
		26.4.2	モジュールと構造化プログラミング 
		26.4.3	現実のモジュールの構成 
		26.4.4	モジュールのまとめ 
	26.5	オブジェクト 
		26.5.1	インタフェースとC++クラス 
	26.6	現実の設計手法 
		26.6.1	リンクリストの問題 
		26.6.2	コールバック 
		26.6.3	インタフェースと実装の分離 
	26.7	まとめ 
27章	まとめのプログラム
	27.1	要件 
	27.2	コード設計 
		27.2.1	トークンモジュール 
		27.2.2	文字タイプモジュール 
		27.2.3	統計クラス 
	27.3	コーディング 
	27.4	機能の説明 
		27.4.1	char_typeクラス 
		27.4.2	input_fileクラス 
		27.4.3	tokenクラス 
		27.4.4	statクラス 
		27.4.5	line_counterクラス 
		27.4.6	brace_counterクラス 
		27.4.7	paren_counterクラス 
		27.4.8	comment_counterクラス 
		27.4.9	do_fileプロシジャ 
	27.5	テスト 
	27.6	リビジョン 
	27.7	最後に 
	27.8	プログラムファイル 
	27.9	プログラミング実習 
28章	CからC++へ
	28.1	K&R型の関数 
		28.1.1	プロトタイプ 
	28.2	構造体 
	28.3	mallocとfree 
		28.3.1	Cのmalloc関数 
		28.3.2	Cのfree関数 
	28.4	構造体からクラスへの変換 
	28.5	setjmpとlongjmp 
	28.6	CとC++コードの混在 
	28.7	まとめ 
	28.8	プログラミング実習 
29章	あまり使用しないC++の機能
	29.1	do/while 
	29.2	goto 
	29.3	? : 構造 
	29.4	カンマ演算子 
	29.5	( )演算子のオーバーロード 
	29.6	メンバへのポインタ 
	29.7	asm文 
	29.8	mutable修飾子 
	29.9	実行時の型の識別 
	29.10	3文字表記 
	29.11	設問の解答 
30章	プログラミングの格言
	30.1	全般 
	30.2	設計 
	30.3	宣言 
	30.4	switch文 
	30.5	プリプロセッサ 
	30.6	スタイル 
	30.7	コンパイル 
	30.8	C++プログラマへの十戒 
	30.9	最後に 
	30.10	設問の解答 

VI部 付録

	付録A	ASCIIコード表
	付録B	範囲
	付録C	演算子の優先順位
		C.1	標準の優先順位 
		C.2	実用的な優先順位 
	付録D	累乗級数による正弦値の算出
	付録E	参考資料
		E.1	コンパイラ 
		E.2	STL 
		E.3	規格 
		E.4	プログラミングツール 

索引

書籍紹介ページへ戻る


書籍についてのお問い合わせは以下までお願いします。

株式会社オライリー・ジャパン

〒160-0003 東京都新宿区本塩町7番地6 四谷ワイズビル
e-mail:japan@oreilly.com


書籍の購入方法トップページへ戻る