C言語にオブジェクト指向技術を取り入れて拡張したC++は複雑な言語であり,すべての仕様をまとめるだけでもかなりの分量になる。これらを自由に使いこなすとなれば,非常に多くの知識が必要となってくる。

 C++の全貌を1冊にまとめるのはきわめて難しく,このためC++にはさまざまなレベルの読者を対象にした数多くの参考書が出ている。ここでは初級から中級程度のC++プログラマ向けの本を紹介する。

じっくり教えてもらうか効率的に突き進むか

新装版
Cプログラマのための
C++入門

柴田 望洋 著
ソフトバンク パブリッシング 発行
1999年6月
337ページ
Accelerated C++
Andrew Koenig,Barbara E. Moo 著
小林 健一郎 訳
ピアソン・エデュケーション 発行
2001年12月
334ページ

 まずは入門書を紹介しよう。C++を学ぶには,その前にCを学んでおくというのが一般的だろう。実際,C++の入門書にはCの知識を前提にしているものが多い。「新装版 CプログラマのためのC++入門」もそうした参考書の一つである。ただし,Cを完璧にマスターしていないと理解できないというわけではない。C++の理解を助けるためにCの知識を使うといった程度である。C++について一通りの説明があり,その中でCとはどのように違うか,どのように拡張されているのかが書かれている。Cをマスターしていれば,書いてあることをスムーズに飲み込めるはずだ。

 この本の著者は,43ページで紹介した柴田望洋氏。CやC++について多くの参考書を書いており,本書を含めていずれもわかりやすい。解説は,コメントと定数から始まり,クラス,テンプレート,継承,ストリームと進む。CからC++への移行を考える入門者には十分な内容だろう。ただし,ANSIがC++を標準化する前に,Release 2.1から3.0相当のC++を対象に書いたものである。古い部分が残っているのと,標準テンプレート・ライブラリ(STL)に触れていない点が気になる。よりC++らしいプログラムを勉強するには,本書だけでは物足りないだろう。

 次に紹介する「Accelerated C++」も入門書だが,プログラミングに役立つ部分から先に説明するというアプローチになっている。この本は著者が大学でC++の短期集中講義を繰り返し,どうすれば効率的にC++を理解させられるかを試行錯誤した結果として著された。

 著者は当初,オーソドックスにクラスの定義から順序立ててC++の仕様を説明する講義を行ったが,学生にストレスを与え評判が悪かった。そこで,早く役立つプログラムが書けるようにSTLの使い方などを教え,詳細な説明は後で追加するというやり方にしたところ,短期間で学生が理解できるようになったという。

 本書でも,最初にいきなりstringやiostreamなどを含むSTLをサンプル・コードの中で使っているが,STL自身について深く説明するのはずっと後になっている。一般の参考書とはかなり違うアプローチである。しかしこの方法は,実際に手を動かしながら効率的に学びたいという人には向いているのかもしれない。

C++の開発者が書いた原典と定番リファレンス

プログラミング言語
C++ 第3版

Bjarne Stroustrup 著
ロングテール/長尾 高弘 訳
アジソン・ウェスレイ・パプリッシャーズ・ジャパン 発行
1998年11月
1031ページ
注解C++リファレンス
マニュアル
Margaret A. Ellis,
Bjarne Stroustrup 著
足立 高徳,小山 裕司 訳
シイエム・シイ 発行
2001年2月
596ページ

 C++には,開発者が著したバイブルとも呼ばれている原典と定番のリファレンス書がある。「プログラミング言語C++ 第3版」と「注解C++リファレンス マニュアル」である。前者は,C++の開発者Bjarne Stroustrup(ビヨーン・ストラウストラップ)氏が単独で,後者は,同氏がMargaret Ellis(マーガレット・エリス)氏との共著で書いたものである。

 「プロ言」などと縮めて呼ばれることもある「プログラミング言語C++」は,C++の主要機能と標準ライブラリにとどまらず,オブジェクト指向の概念や抽象化テクニックを網羅的に書いている。C++を理解するためだけに書かれた機能解説書ではなく,プログラミング・ツールとして,いかにC++を使いこなせばよいかということにまで触れているのが特徴だ。そのせいか,初心者が最初に勉強するための本とは言いがたい。C++でプログラミングできるようになった人が,もっと便利にC++を使えるようになりたいと感じたときに読む本である。

 「注解C++リファレンス マニュアル」は,原書のタイトルであるThe Annotated C++ Reference Mannualの頭文字をとって「ARM」と呼ばれ,多くのC++プログラマたちから親しまれている。この本も初心者向けではなく,中級以上のプログラマ向けに書かれており,書かれている順に読み進めて勉強するたぐいの書籍ではない。プログラミング上の疑問が浮かんだ時に,書かれた内容を読んで解決するというのが本書の正しい使い方だろう。大きさ重さもプログラミング関連書籍としては小さい方であり,持ち運びしやすい点もありがたい。

 中級者以上向けと書いたが,もちろん勉強中の初級者が持っていても損はない。中級以上のプログラマに質問した答えが「ARMの,~に載っているよ」と返ってくることもあるからである。

 しかし,この本はC++の進化に従って改訂されていないため,内容がやや古くなってしまっている。このため,書かれていることをそのまま実装しても,正しく動作しない可能性がある。

有名ライターによるC++能力向上に効果的な3冊

Effective C++ 改訂2版
Scott Meyers 著
吉川邦夫 訳
アスキー 発行
1998年5月
271ページ
More Effective C++
:最新35のプログラミング技法

Scott Meyers 著
安村 通晃,伊賀 聡一郎,飯田 朱美 訳
アスキー 発行
1998年8月
297ページ
Effective STL
Scott Meyers 著
細谷 昭 訳
ピアソン・
エデュケーション 発行
2002年1月
258ページ

 C++参考書の有名な著者といえば,多くの人がScott Meyers(スコット・メイヤーズ)氏の名を挙げるだろう。彼の書いた「Effective C++ 改訂2版」「More Effective C++:最新35のプログラミング技法」「Effective STL」の3冊も薦めておきたい。

 どれも初心者向けの入門書ではない。良いプログラムを作るのに効果的な技術や鉄則を集めたノウハウ集である。このため,C++が実装している特定の機能について調べようとか,特定のプログラミング技術について勉強しようというときには使いづらい。とはいえ,それぞれの技術や鉄則は関連性が薄く,一つひとつが完結しているので,どのような順序で読んでも構わない。自分に興味のある分野から気の向いた順に読んでみるという読み方がよいだろう。

 「Effective C++」は,プログラムと設計を改善する50の効果的な方法がまとめられている。50の方法のうち主なものは基礎的な内容に重点を置いているが,中にはプログラミング全体に影響するような大きな項目もある。

 これに対して「More Effective C++」に含まれている項目は,より上級者向けであり,プログラミングの微細な部分に細心の注意をはらって,効果的なプログラミングを行えるようになることを目指している。

 最後の「Effective STL」は,タイトル通り標準テンプレート・ライブラリ(STL)の使い方を改善する50の方法を示している。他のEffectiveシリーズと同様に,順不同で気軽に拾い読みすることができる。注意してほしいのは,STLの使い方に焦点を当てており,新しいコンポーネントの追加方法,独自のアルゴリズムの作成,新しいコンテナの作成などSTLの拡張技術については触れていない点である。STLが備えている標準的な機能をマスターしたい人に向いている。

 これらEffectiveシリーズ3冊は,訳者がすべて違う。しかし同一筆者であることから,文の調子はほとんど同じである。ところどころにアメリカ人らしいユーモアを織り交ぜ,難解なコツの説明をわかりやすく解説している。それぞれで取り上げている項目は目次で紹介されているので,目次を読むだけでもためになる。書店などで先に目次を確認して,読んでみたい項目がいくつもあれば,購入するとよいだろう。