本書は、1996年の第1版発行以来、多くの企業や学校で活用されてきたC++実践ガイドの決定版です。第2版ではANSI C++に対応した全面改訂が行われました。本書の特徴は、C++の言語仕様の解説にとどまらず、プログラミングのスタイルやデバッグの方法、さらに構想、設計、デバッグ、文書化、保守、バージョンアップなど、プログラムのライフサイクル全般を解説していることです。著者の豊富なプログラミング経験を基にした実践的な内容も豊富に盛り込まれています。プログラミング初心者、Cの経験をC++に活かしたいプログラマに加え、すでにC++を習得しているが、よりよいプログラミング作法を身に付け、信頼性を向上させたいプログラマにもおすすめです。
C++実践プログラミング 第2版
Steve Oualline 著、望月 康司 監訳、株式会社クイープ 訳
- TOPICS
- 発行年月日
- 2003年09月
- PRINT LENGTH
- 644
- ISBN
- 978-4-87311-148-3
- 原書
- Practical C++ Programming, 2nd Edition
- FORMAT
目次
監訳者まえがき はじめに 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 プログラミングツール 索引