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

[cover photo]
  • 2003年09月 発行
  • 644ページ
  • ISBN4-87311-148-X
  • フォーマット Print
  • 原書: Practical C++ Programming, 2nd Edition

オライリー・ジャパンで書籍を購入:
定価6,264円


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

関連書籍

C++クックブック
C++プログラミング入門 新版
Effective Modern C++
Optimized 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     プログラミングツール 

索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]