C++の勉強をしていて、とりあえずオライリーの『C++ プログラミング入門』を読みました。次に何を読んだらよいですか?おすすめを教えてください。『C++ プログラミング入門』では省略されているか、囲み記事でさらっと触れてあるだけのトピックを学ぶことのできる本が良いです。

回答の条件
  • 1人3回まで
  • 登録:2008/04/29 14:43:07
  • 終了:2008/05/06 14:45:04

回答(4件)

id:ki2neko No.1

きつねこ回答回数11ベストアンサー獲得回数02008/04/29 17:52:38

ポイント23pt

プログラミング言語C++

質問に反するようですが、オライリーで書いてあることはすべてオライリーの言うとおりではないです。複数の名著を比較することが大切だと思います。また、質問の内容のような本はおそらく駄作であるかものすごく高度な本だと思います。なぜならc++というとてつもなく奥の深い言語の核心に触れずに周辺技術やうわべ、ワンテクなどしかまとめていないような本は筆者がなにか勘違いしているか、基本は全てマスターしていて暗黙の了解である高度な技術者向けの本である可能性が高いからです。

蛇足ですが、「とりあえずオライリーを読んだ」のなら、さらに次の本を探すというよりも実践をお勧めします。

id:hans

『C++ プログラミング入門』が「Cは知ってる人のためのC++入門書」を求めていた私にとっては理想的な本だったので、その次のステップとして何か、と思ったのですが、そうそう好都合な本はないのでしょうかね。

ご紹介の本はC++設計者によるものですね。日本語版は現在絶版なのでしょうか?古本はプレミアが付いてるようだし、どうやら訳も良くないようなので、英語版の方で検討したいと思います。

「実践」については一応自分なりのプロジェクトを立ててコードを書いています。

2008/04/29 23:14:37
id:t_shiono No.2

t_shiono回答回数256ベストアンサー獲得回数222008/04/30 02:01:04

ポイント23pt

ご要望にあっているか迷うところですが、C++でコードが書くことを目標とするのであれば、

「Effective C++」と「More Effective C++」は必須かと思います。

まずは、この内容を読んでみては如何でしょうか?

恐らく、入門書しか読んでいないのであれば、理解しにくい部分はあるかと思いますので、その箇所は別な形で補う必要はあるかと思います。

蛇足ですが、前の回答者さんも書かれていますが、C++は奥の深い言語だと私も思っていまして、「C++使えます」と豪語する人は、大概分かっていない人だと思っております。

id:hans

それらの本はいずれ近いうちに読みたいと思っていました。「恐らく、入門書しか読んでいないのであれば、理解しにくい部分はあるかと思いますので、その箇所は別な形で補う必要はあるかと思います」の「別な形」として何が良いか、というのがまさに私の知りたいところです。実は今『STL標準テンプレートライブラリによるC++プログラミング』を読んでいるのですが、現状の私の知識だと「え、何この書き方??」という部分が時々出てきます。ウェブで検索したりしながら何とか読み進めてはいますが、こうした『C++ プログラミング入門』でカバーされていない部分をある程度体系的に補える本を探しているのです。

2008/04/30 07:19:57
id:sterwars22 No.3

sterwars22回答回数363ベストアンサー獲得回数02008/04/30 03:58:13

ポイント22pt

はじめてのC++

id:hans

検討させていただきます。

2008/04/30 07:24:15
id:t_shiono No.4

t_shiono回答回数256ベストアンサー獲得回数222008/05/02 08:38:32

ポイント22pt

> 「別な形」として何が良いか

についてですが、自分の場合は、

C++: language&libraries

http://ml.tietew.jp/cppll

でした。

現在のメールの量は減ってますが、未だに興味深い議論がときどき見れます。

過去ログを読むだけでも十分興味深く、なるほどなと思えると思いますよ。

C++の難しさは、プログラミング言語の難しさもあるのですが、それに加えて、設計レベルのよしあしも重要になってくるところだと思います。

語弊はありますが、いわゆる簡単といわれる、Perl、PHP、Rubyなどは、大きなものを作るうえでも大部分の場合は、小規模であれば単純な処理の羅列として記述し、大きなアプリケーション(といっても大部分はWebアプリですが。)の場合は既存の設計されたフレームワーク上で構築する。のが基本だと思います。

C++の場合はそれを必要とされる状況を踏まえると、下位のレベルから上位のレベルまで自作ということが珍しくないと思います。その分、その規模のものをどう効率的に構築するかということも踏まえて考えなければいけなく、また、同時にパフォーマンスが要求される場合も多いわけです。

それを扱うために、オブジェクト指向、ジェネリックプログラミングと言った技法を取り入れてあるのですが、それらを本当に使いこなすには、その前提となる理論的な部分をある程度押さえていないと、何が何だか分からなくなってしまいます。

そういった意味では、次の書籍も押さえておくと、よいかもです。

「オブジェクト指向における再利用のためのデザインパターン」

なぜ、オブジェクト指向が必要なのという部分はデザインパターンを理解するのが一番効率的だと思っております。この本は他のデザインパターンの本より難解なイメージを与えていますが、例文がC++のものが多いので、よいかと。

デザインパターンは、理論的なパターンと、それを言語レベルで実現する実装手法とがあって成立するので、C++の表現力でどう扱うかといういい例になると思います。

「Modern C++ Design」

これは、オススメというか、テンプレートってこんなにすごいんだと目から鱗が落ちる本です。

ただ、難解です。入門書ではテンプレートってこんな風に色々な型を扱えますねといったトイプログラムの域を超えて、こんな使い方ができるのかと気づかされます。

ただ、背景にはデザインパターンがふんだんにありますので、それらを踏まえてから読むことをオススメします。


書籍をあげておいてなんですが、そいうった言語の特性から、「自分が持っている問題」と「教科書に載っている似た問題」が必ずしも一致しません。よく言えば、実践的といえるのかもしれませんが。

学ぶ上では、「自分の問題」を解くというプロセスが何よりも身になります。

もし、身近にC++が好きな方がいれば、自分の問題を話して、どうするのがよいか議論を重ねたり、そのような方がいなければ、さきほどあげたMLなどを利用して、識者の方のご意見を伺ったりして知見を広めていくとよいのではないかと思います。


何かの参考になれば。

id:hans

大変参考になる回答ありがとうございます。

MLやweb上の情報で有益なものも多いですね。質問者の方からなんですが、このサイトがすごく勉強になりました(英語):

http://www.parashift.com/c++-faq-lite/

Q. Why should I use container classes rather than simple arrays?

A. Because arrays are evil.(以下略

こういうユーモアのセンスもあって最高です。

デザイン・パターンとかテンプレートの高度な活用は今後の課題として念頭に置いておきたいと思います。すでにSTLで感動してますが、これは序の口ということなのでしょうね。

2008/05/03 09:30:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません