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

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
644
ISBN
978-4-87311-148-3
原書
Practical C++ Programming, 2nd Edition
FORMAT
Print
Print
6,380円

本書は、1996年の第1版発行以来、多くの企業や学校で活用されてきたC++実践ガイドの決定版です。第2版ではANSI C++に対応した全面改訂が行われました。本書の特徴は、C++の言語仕様の解説にとどまらず、プログラミングのスタイルやデバッグの方法、さらに構想、設計、デバッグ、文書化、保守、バージョンアップなど、プログラムのライフサイクル全般を解説していることです。著者の豊富なプログラミング経験を基にした実践的な内容も豊富に盛り込まれています。プログラミング初心者、Cの経験をC++に活かしたいプログラマに加え、すでにC++を習得しているが、よりよいプログラミング作法を身に付け、信頼性を向上させたいプログラマにもおすすめです。

目次

監訳者まえがき
はじめに

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 プログラミングツール

索引