組込み現場の「C++」プログラミング 明日から使える徹底入門

[表紙]組込み現場の「C++」プログラミング 明日から使える徹底入門

紙版発売

A5判/320ページ

定価3,058円(本体2,780円+税10%)

ISBN 978-4-7741-3802-2

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

組込み開発におけるプログラムは,年々その規模が拡大しています。プログラムの行数も,最近3年の間に,10万行を超えるものの割合が全体の3割から6割以上へと倍増しています。そのため,C言語に加えて,最近ではC++もよく使われるようになっています。大規模開発ではオブジェクト指向的な手法が必要である上,組込みにおいてはC++しか選択肢がないということもあるでしょう。本書は,C++を使わざるを得なくなっている組込み現場のプログラマーに,このジャンルに特化した知識をも同時に提供しようとするものです。

こんな方におすすめ

  • 組込み開発に従事しているプログラマー
  • C言語は知っているがC++は自信がないという方
  • 組込みならではのC++のテクニックを勉強したい方

目次

第1章 明日からでも使えるC++

1.1 C++というのはこんな言語

  • 1.1.1 Cのスーパーセット言語としてのC++
  • 1.1.2 オブジェクト指向プログラミング言語としてのC++
  • 1.1.3 ジェネリックプログラミング言語としてのC++
  • 1.1.4 C++はどんなプログラミング手法も強制しない

1.2 組込み開発でC++を使う

  • 1.2.1 C++を使う場合のメリットとデメリット
  • 1.2.2 C++の静的なエラー検出機能
  • 1.2.3 C++を使えない状況

1.3 「ベターC」としてのC++はこんなに便利

  • 1.3.1 Cとまったく同じコードをC++で書く
  • 1.3.2 些細な拡張と相違点
  • 1.3.3 「const修飾子」はかなり異なる
  • 1.3.4 ポインタではない,文字どおりの「参照型」
  • 1.3.5 名前の衝突を防ぐ「名前空間」
  • 1.3.6 同じ意味の関数には同じ名前を――多重定義と関数テンプレート
  • 1.3.7 例外処理
  • 1.3.8 意味が明確なキャスト演算子

1.4 Cの資産を活用しよう

  • 1.4.1 Cの資産を利用するためのテクニック
  • 1.4.2 C++の関数をCから呼び出すには?

1.5 アセンブリ言語とのインターフェース

  • 1.5.1 asm宣言
  • 1.5.2 アセンブリ言語で記述したプログラムとのリンク
  • 1.5.3 スタートアップの記述

1.6 ハードウェアの制御と割り込みハンドラ

  • 1.6.1 整数値をポインタ型にキャストした場合の振る舞いは処理系に依存する
  • 1.6.2 ビットフィールドは要注意
  • 1.6.3 割り込みハンドラはC互換関数を用いる

第2章 クラスを使いこなそう

2.1 オブジェクト指向プログラミングの概要

  • 2.1.1 オブジェクト指向分析/オブジェクト指向設計/オブジェクト指向プログラミング
  • 2.1.2 構造化プログラミングと構造化プログラミング言語
  • 2.1.3 オブジェクト指向プログラミングの概要

2.2 クラスの基礎

  • 2.2.1 コンストラクタとデストラクタ
  • 2.2.2 データメンバーの初期化
  • 2.2.3 メンバー関数
  • 2.2.4 アクセス制御
  • 2.2.5 構造体からクラスへ
  • 2.2.6 new演算子とdelete演算子
  • 2.2.7 静的メンバー関数
  • 2.2.8 静的データメンバー
  • 2.2.9 演算子の多重定義
  • 2.2.10 コピーコンストラクタとコピー代入演算子
  • 2.2.11 クラスの中で宣言/定義できるもの
  • 2.2.12 クラステンプレート

2.3 継承と仮想関数

  • 2.3.1 クラスの継承
  • 2.3.2 基底クラスのアクセス制御
  • 2.3.3 多重継承と仮想継承
  • 2.3.4 基底クラスの初期化
  • 2.3.5 仮想関数
  • 2.3.6 純粋仮想関数
  • 2.3.7 実行時型識別(RTTI)

2.4 動的な多相性と静的な多相性

  • 2.4.1 仮想関数と多相オブジェクト
  • 2.4.2 テンプレートによる静的な多相性
  • 2.4.3 テンプレートを使った排他制御
  • 2.4.4 ファンクタを用いたスマートなコールバック

2.5 堅牢なクラス設計

  • 2.5.1 クラスのメンバーは可能な限り非公開にしよう
  • 2.5.2 継承されるクラスのデストラクタは,仮想関数にするか限定公開にしよう
  • 2.5.3 new演算子をカスタマイズしよう
  • 2.5.4 オブジェクトをコピーすべきでないクラスは,コピーを禁止しよう
  • 2.5.5 継承ではなく,データメンバーにできないか検討しよう
  • 2.5.6 メンバー関数ではなく,非メンバー,非随伴関数にできないか検討しよう
  • 2.5.7 暗黙の型変換をなるべく回避しよう
  • 2.5.8 クラスが内部で管理するハンドルを公開しないようにしよう
  • 2.5.9 例外安全なコードを書こう

2.6 イディオムとデザインパターン

  • 2.6.1 Pimplイディオム
  • 2.6.2 RAIIイディオム
  • 2.6.3 NVIイディオム
  • 2.6.4 Iteratorパターン
  • 2.6.5 Singletonパターン

第3章 C++プログラムの裏側

3.1 多重定義の裏側

  • 3.1.1 マングル処理
  • 3.1.2 多重定義の解決

3.2 クラスの裏側

  • 3.2.1 クラスのメモリ配置
  • 3.2.2 メンバー関数
  • 3.2.3 アクセス指定子の影響

3.3 継承の裏側

  • 3.3.1 継承を行った場合のメモリ配置
  • 3.3.2 継承関係にあるクラスへのポインタを型変換したとき

3.4 仮想関数の裏側

  • 3.4.1 仮想関数テーブル

3.5 初期化と終了処理

  • 3.5.1 静的初期化と動的初期化
  • 3.5.2 局所的な静的記憶域期間を持つオブジェクトの初期化
  • 3.5.3 終了処理

3.6 new演算子とdelete演算子の裏側

  • 3.6.1 new演算子とdelete演算子の振る舞い
  • 3.6.2 operator new関数(割り付け関数)
  • 3.6.3 operator delete関数(解放関数)

3.7 例外処理の裏側

  • 3.7.1 例外処理の振る舞い
  • 3.7.2 setjmpマクロとlongjmp関数を使った例外処理の擬似コード
  • 3.7.3 途中のデストラクタを呼び出す擬似コード

3.8 例外指定の振る舞い

3.9 テンプレートの裏側

  • 3.9.1 テンプレートの具現化
  • 3.9.2 テンプレートは静的に解決される
  • 3.9.3 テンプレートによるプログラムサイズの肥大化

3.10 オーバーヘッドはここから始まる

  • 3.10.1 Cとまったく同じ記述をした場合のオーバーヘッド
  • 3.10.2 デストラクタを持つ自動オブジェクト
  • 3.10.3 オブジェクトの構築と解体
  • 3.10.4 一時オブジェクト

第4章 C++プログラムの移植性

4.1 まず,C++の歴史を振り返ろう

4.2 Embedded C++と標準C++

  • 4.2.1 Embedded C++の概要
  • 4.2.2 Embedded C++を使ううえでの注意点

4.3 標準ライブラリはどこまでサポートされるか?

  • 4.3.1 フリースタンディング環境
  • 4.3.2 ホスト環境

4.4 組込み開発では例外処理を使用すべきか?

  • 4.4.1 例外処理を使用しないとは?
  • 4.4.2 例外処理を使用できない,または使用したくない状況

4.5 現実の処理系の標準準拠度

  • 4.5.1 テンプレートに関する問題点
  • 4.5.2 名前空間に関する問題点
  • 4.5.3 例外処理に関する問題点

4.6 Cと共通の注意点

  • 4.6.1 バイトオーダーとビットオーダー
  • 4.6.2 境界調整
  • 4.6.3 int型のサイズ
  • 4.6.4 ヘッダ名

第5章 C++実用テクニック

5.1 ベターCのためのコーディング規約

  • 5.1.1 明示的なデストラクタは定義しない
  • 5.1.2 仮想関数は使用しない
  • 5.1.3 仮引数を1つ受け取るコンストラクタには,必ずexplicit指定子を付ける
  • 5.1.4 例外処理は使用しない

5.2 行間を読もう

  • 5.2.1 行間や字句間で何が起きるのか?

5.3 例外安全に気を配ろう

  • 5.3.1 例外に対する安全性とは?
  • 5.3.2 3つの例外安全保障
  • 5.3.3 失敗しない保障が必要な関数

5.4 サイズ効率を改善するには?

  • 5.4.1 例外指定を活用する
  • 5.4.2 例外を送出しない関数をインライン関数にする
  • 5.4.3 必要のないデストラクタは定義しない
  • 5.4.4 多くの仮想関数を持つクラスは作らない
  • 5.4.5 継承の階層は浅くする
  • 5.4.6 テンプレートを有効活用する

5.5 マルチタスク環境でのC++

  • 5.5.1 局所的な静的オブジェクトの初期化
  • 5.5.2 例外処理
  • 5.5.3 new演算子とdelete演算子
  • 5.5.4 volatile修飾子を活用する

著者プロフィール

高木信尚(たかぎのぶひさ)

昭和42年生まれ,大阪市在住。ゲーム機メーカー勤務,個人事業主を経て,現在,株式会社きじねこ代表取締役,株式会社クローバーフィールド代表取締役。NPO法人TOPPERSプロジェクト特別会員。