目次
監訳者まえがき
はじめに
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 プログラミングツール
索引
|