• ベストアンサー

C++の勉強方法

お世話になります。whatpyonと申します。 最近C++を習得しようと思って勉強を始めているところですが、正直勉強方法に悩んでいます。 (同じような質問を投稿されていた方のレスも拝見させていただきました。) 最終的には、趣味プログラミングで終わらせるつもりはないです。 <最終的な目標> 『MFCを使ってダイアログベースのアプリケーションを作成する』  ※DBへのアクセス処理も含む。 <期間> 3ヶ月(目安) プログラム経験は、VB、Javaを1ヶ月程度(所詮付け焼刃の知識しかないですが)しかなく、ほぼ初心者です。 初心者が理解できるようなMFCの書籍を購入して取り組んでいるのですが、書籍で書いている通りのプログラムは組めますが、本質を理解できていないためか、応用を利かせることができません。 また、クラスをどのように分割すれば一番効率的なのかといったこともまったくわかりません。 ここは、まず1ヶ月程度みっちりC++の基本文法、クラスの設計方法等の習得に注力すべきなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.6

> MFCは、初心者向けではないんですね。 そう思います。 本質的に初心者向きじゃないのに、一見簡単な幻想を与えるところがまた危険というか。 ちょっと使い出すと、結局Win32とC++の知識がないと扱いきれないことに気づくと思います。 # 気づかない人は…いずれ痛い目を見るわけですが、そのときに迷惑をこうむるのは本人だけとは限らず。 > イメージ的には、Win32APIを使いやすく包括したものがMFCだと思っていたので、 > そちらのほうが簡単なのかと思っていました。 大まかなイメージはあってますが、"すでにWin32を知っていて、C++をそこそこ知っている人に対して"、多少使いやすく包括したもの、という方が妥当かなと私は思います。 ちょっとしたサンプル以上のことをしようと思うと、 結局Win32の知識とか、MFCの内部動作に関する知識がものをいいます。 # 本来的には、そういうことを知らなくても使えるのがクラスの理想なのですが、残念ながらMFCはそうではありません。 こういうときにMFCから始めた人は手が出なくなることも多く(もちろん全員とはいいませんし、線のいい人もいますが)、つぶしが利かないことが多々あります。 Win32の全体像ではなく、MFCからこぼれた部分だけやっつけても高が知れてしまう。 # 多分、もっと安全で簡単な開発はVB推奨とかだったと思います>当時のMicrosoft > 良書と呼ばれる本を理解できるまで読んでいったほうがよいのでしょうか? 物事にはステップがありますので、入門書としてまずは「独習C++」でいいと思います。 とはいえ、(できれば入門書と合わせて)まずこのあたりは読んでみてもいいかなと思います。 「Effective C++」「Effective STL」 これらの本は、いずれも「こういうことはなぜ危ないのか」「こうすればいいのか」「こうやれって書いてあったのはこういう理由か」とかが書かれてますので、 入門書の方で理解が進むとだんだん身にしみてくるんじゃないでしょうか。 ということで、できれば早いうちから反芻してみることをお勧めしておきます。 # 他の本は、その後でいいと思います。C++の設計と進化とかは、ある程度わかってから読むと「なぜC++はこんな設計なのか」良くも悪くも理由がわかって面白いし、役に立つと思いますが、それはまた先のお話かと。

whatpyon
質問者

お礼

ご回答ありがとうございます。 Cで、まずはポインタ、構造体、キャスト、プリプロセッサくらいは押さえて、『独習C++』に移ろうかなと思ってます。前に、学習したときは、わかったつもりでいたけど、ポインタと参照の区別がはっきりついておらず、実際プログラム組んだらメモリリークばっかり起こしてしまったので。 薦めていただいた本も是非手元に置いて熟読しようと思います。

その他の回答 (5)

回答No.5

「C++の設計と進化」監修者です。 正直申し上げてビギナが読む本とは言い難い。 おそらく持て余します。 > ここは、まず1ヶ月程度みっちりC++の基本文法、クラスの設計方法等の習得に注力すべきなのでしょうか? これに同意。

whatpyon
質問者

お礼

ご回答ありがとうございます。 「C++の設計と進化」 拝見させていただきましたが、確かに私には難しかったです。知識がほとんどないため、これを読むのは、相当根気がいるなと感じました。 まずは、入門書片手に、ひたすらコマンドラインベースで、C/C++のプログラムを組んでみて、専門的な書籍を読んで理解を深めていこうとおもいます。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.4

> 「C++の設計と進化」(ソフトバンク)はお勧めです。 いい本ですが、入門書ではないので、そのつもりで。 C++の設計者自身の本です。 この本の思想に共感できないとC++を極めるのは難しいかも。 (それはつまり言語の設計思想に共感できないということなので…) なお、同じ著者の「プログラミング言語C++」もお勧めします。 その後は、定番ですがMayers本「Effective C++」「Effective STL」「More Effective C++」あたり。 他にも「Efficient C++」とか、「C++ Coding Standards」とか、ピアソン・エデュケーションの本は比較的良書が多いです。 ちょっとわかってくると「Modern C++ Design」なんてのも引き出しが広がるかと。 #3の方が書かれている水準できちんとC++をマスターするには、 設計の本とか抜きで、"言語の基礎"として、このくらいは読んでみて欲しいかな。 この水準に満たない職業プログラマもいるのは確かですが、まともにC++で書ける人ってのは、やはりこの程度は読んでて普通だと思います。 逆にいうと、このあたりに手を出さないと付け焼刃を域を出ない可能性が高い。 付け焼刃のC++ってのは極めて危険な存在です。 たとえ話で言えば、Javaがテフロン加工のフライパンならC++は鉄製です。C++を使って綺麗な焼き色をつけるテクニックがないと、焦げ付かせる危険が高いだけの代物です。 別のたとえで言えば、Javaがオートマの乗用車とすると、C++はレーシング仕様です。微妙なアクセル/ブレーキ/クラッチワークができないと、エンストしてまともに動きもしなかったり、最悪は一見動いたように見えてコーナーで滑ってクラッシュしたりします。 その代わり、乗り手次第で、他の車種では実現できないようなパフォーマンスを叩き出せたりするのです。 # この魔力に取り付かれてしまった人も多い>C++屋さん。 ちなみに、この手の技術書は高いです。「C++の設計と進化」で4千円。「プログラミング言語C++」などは7千円。他も3千円程度はします。 読み込むのも大変ですし、読んで試すだけで、簡単に3ヶ月が終わるでしょう。 他のレス等を見られたのであれば、多分コマンドラインを薦められてる回答が少なからずあったと思います。MFCは初心者に向かないってのもあるのでは。 まともにC++をマスターするためにはいつか通る道と思って頑張ってください。 # C++をこのレベルで理解すると、他の言語は比較的簡単に理解できるんじゃないでしょうか。

whatpyon
質問者

お礼

ご回答ありがとうございます。 「C++の設計と進化」(ソフトバンク) 「Effective C++」 「Effective STL」 「More Effective C++」 を書店で眺めてみましたが、内容が少し難しく 読み応えがあるなぁ…と感じました。 やはり、少し難しいと思っても、良書と呼ばれる 本を理解できるまで読んでいったほうがよいので しょうか? 以前、入門書として『独習C++』を購入していたので もう一回はじめから読み直そうと思ってはいたのですが…。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.3

>>ここは、まず1ヶ月程度みっちりC++の基本文法、クラスの設計方法等の習得に注力すべきなのでしょうか? C++は、Cをちょっと発展させた程度のものではなく、ソフトウェア開発の研究成果を注ぎ込んだ、高度でプロ向きな言語です。通常はプログラマへの要求レベルが高くなりすぎて、「(わかんなーい!)誰も保守できない」となる可能性のある言語です。 ですので、C++だけでなく、Cの知識は必須ですし、複合/構造化設計の知識も必須と思っています。Cが完全にマスターできていれば、3ヶ月でなんとかなるかもしれませんけどね。 "C++"、つまり「Cに1加える」と書かれているように、まずCをマスターする必要があります。また、"C"の完全理解にはアセンブラの理解が必要だと思っています。 昔、C言語で、"Hello,world!"を表示した方が、「うまくいったよ。で、ネットワークプログラムはどう書けばいいんだ?」と言って、「バカか、おまえは!(100年早い)」 と言われた話を読んだことがあります。小学生が、いきなり微積分の問題をやらないように、まず、算数レベルのCから学んでゆくべきでしょう。その後アセンブラを学習するとして、ここまでて半年か1年かかるかもしれませんね。で、複合/構造化設計やDFDの知識を得て、C++の文法とクラスの設計法、C++でのオブジェクト指向、コーディング上の注意点などの習得に注力すればいいと思います。 なお、C++が本領を発揮するのは、複雑で巨大なシステムにおいてだと思ってます。DBを読んでダイアログ表示する程度では、Cで十分だと思いますよ。もちろん小さなシステムでもC++のメリットは享受できますけどね。 P.S. 「C++の設計と進化」(ソフトバンク)はお勧めです。とりあえず、この本を購入されて、自分の目指すゴールの高さを推察してみてください。

whatpyon
質問者

お礼

ご回答ありがとうございます。 やはり、物事を習得するのには、それなりの時間がかかるのですね。当たり前ですけど。 特にC言語は、何でもできる反面、それだけ学ぶのにも時間がかかるという話をよく聞きます。 できれば、1年で実装できるレベルまでもっていきたいなと思っているので、ひたすら勉強してみます。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

趣味で終わるつもりはないとのことですので、一応本職として、そのつもりで書きます。 最終的に何がしたいかによりますが、「MFCのダイアログでDB接続」という目標自体がお勧めできません。C++で開発する"旨み"がないので、再考をお勧めします。 まず、MFC自体、"C++としては"あまり設計が綺麗じゃないです。 # 歴史的しがらみが多い、ともいう。 そして、ダイアログベースは、オブジェクト指向とかあまり関係ないことが多いです。 確かに、現在の所はまだMFCは現役ですが、これからを見据えると必ずしも賢い選択とは言いかねます。 画面があればよくて、DBと接続する二層のクライアントを作るような、 業務アプリ的なものを指向しているなら、古くはVB等の方がはるかに楽でしょう。C++で苦労するより、Accessとか、もしくは.NET系の言語の方がよさそうに思います。 逆に、C++を言語として覚えて生かして生きたいということなら、MFCはとりあえず捨てておいた方がいいです。 MFCは、C++とかをわかってる人が、Windows環境で少しでも楽するためのものであって、入門用とはいえません。 今(そして当面)、C++が活躍するのは組み込み分野(携帯電話やらデジタル家電やら)とかの方が強く、Windowsに固執せずに言語としてC++を理解している方が多分お得です。 ゲーム分野などでもC++は強いですが、この際もMFC(特にダイアログ)の知識が役に立つことは少ないでしょう。(たとえWindowsのゲームでも)。 MFCの下にある、Win32の仕組みがわかっている方が余程有用です。 # これがわかってれっば、MFCなんて後付けでも何とかなります。 C++をものにしたいのであれば、コマンドラインでいろいろなものを書いてみるのがお勧めです。 ポインタ操作などは難点と同時に強みでもあります。 templateを書けとまでは言いませんが、STLを使いこなせるように。STLのアルゴリズムを全部使ってみるだけでも、C++の世界が見えてくるのではないかと思います。 クラス設計は、言語とは別物なので、オブジェクト指向設計の本を読んだり、UMLやデザインパターンなどを学んだりして基礎を知り、何かを作ってみてください。

whatpyon
質問者

お礼

ご回答ありがとうございます。 専門家のご意見としてありがたく拝見いたしました。 まずは、Cでポインタの操作を覚えていこうと思います。 MFCは、初心者向けではないんですね。 イメージ的には、Win32APIを使いやすく包括したものがMFCだと思っていたので、そちらのほうが簡単なのかと思っていました。 クラス設計は、もう少し時期を置いてから取り組もうかなと思います。

  • koedame
  • ベストアンサー率33% (10/30)
回答No.1

私もプログラミングは初心者ですが、c, java, VB,など、 専門学校で学んでいます。c++ も自分で学習中です。 class についても、とりあえず理解できた程度でまだ ほとんど使っていないので、アドバイスだと思って 聞いてください。 >プログラム経験は、VB、Javaを1ヶ月程度(所詮付け焼刃の知識しかな >いですが)しかなく、ほぼ初心者です。 c++ を覚えるなら先に c 言語の方をやってからのほうが わかりやすいのです。おそらく関数やポインタに ついてもまだ、知りえていないと思います。 特にポインタについては挫折の話をよく聞きます。 class 自体の習得はそれほど時間は要しません。 なので、基本(c 言語、又はそれに近い java)を先に class の土台になるまではやったほうがいいです。

whatpyon
質問者

お礼

ご回答ありがとうございます。 参考になる意見をありがとうございます。 確かに、ポインタについての知識はほとんどないに等しいです。 C言語から始めて、基礎固めをやっていこうと思います。

関連するQ&A

  • 初心者の勉強方法

    初めてプログラムを勉強したいと思います。 最終的にはFXの自動売買プログラムを作りたいと思っています。 (MetaTraderというソフトです。) いろいろなサイトを見てみましたが全く理解が出来ません。 特にプログラムの組み立て方がよくわかりません。 このあたりを初心者でも分かるような書籍やサイトなどはあるでしょうか?

  • C++/CLIについて

    現在C、C++を1部、WIN32を習得しているのですが、ウィンドウアプリケーションを作るときは全てWIN32APIを使用して作っています データベースを使ってみようと思い、VS2005(Pro)についていたSQLEEを使ってみようと色々と調べたんですが、ほとんどの書籍やサイトがVBかC#を使用していました しかし、VBやC#でプログラムを書き直すのも大変なのでどうしようかと思っていたらC++/CLIなるものの存在を知りました そこでC++/CLIの勉強をしてDBを使おうと思ったのですが、何分習得言語以外の知識が足りないため不安なところを質問させてください 以下質問 1、VB、C#、C++/CLIとC+WIN32の大きな違いは.NETFrameWorkが使えるか使えないかということであっていますか? 2、多くの書籍がVBやC#とDBを組み合わせているのは、.NETに含まれるADO.NETを使用するからですか? 3、C/C++を習得するとMFCを習得するのが一般的なようですが、MFCのメリットがイマイチわからないので教えてください(WIN32で十分代用可能なため) 4、C++/CLIを習得すればMFCは必要ありませんよね? 以上質問の数が多いですがよろしくお願いします

  • Objective-Cの効率的な勉強

    objective-cを勉強しているのですが、クラスの意味や コードの構造が中々理解できません。 そういった基礎的な事を習得できるドリルや問題集は ありませんでしょうか?非常に困っています。 どなたかご教示頂けないでしょうか。

  • C++かCの再選択 

    いつもお世話になっています。 c++の初心者ですが、煮詰まったので質問させてもらいます。 私はC++の入門書を理解し2~3個のコンソールプログラムを作った位のレベルです。煮詰まったのは、このままC++を勉強するかそれともCを勉強した方がいいのか迷っています。Cは知らないのでC++入門書を勉強した時、Cを勉強しているのと一緒なのですか(軽くSTL、オブジェクト志向の考え方を追加した感じ) Cのほうが文法、メモリの動きなどサンプルプログラム を作るにもクラスをつくる手間が省け簡単に書けますし 早く習得できると思うのですが。気になったのは ここの書き込みで、Cの拡張がC++とCとはC++ は異言語の意見があり、私にはわかりません。 ただ「C++がわかっていてCを知らない人はいない」との意見に納得した事もあり私の選択は間違っていた のかなと思ったのです。できればC->C++経験者と いきなりC++経験者のアドバイスが聞きたいのです。

  • VisualStudioでのプログラム勉強(初心者)

    数ヶ月前、プログラミングに興味を持ち、いろいろ調べてみてC++言語を習得したいと思いVisualStudio .NETを購入しました。 しかしいろいろといそがしく、特に何もできずに今に至ったのですが、夏休みということもあり、じっくりとプログラミング学習に打ち込めそうです。 書籍は「Cの絵本」「C++の絵本」というものをVisualStudio購入に合わせて買ったので、そこに載っていた本当に基本的なことは理解しているつもりです。 当面の目標はMFCを使ったGUIのプログラムを作ることができるようになることなのですが、どのようなことをしたらよいのか分かりません。 そのようなことが解説されているサイトをご存知の方、教えてください。 もしくは、アドバイスをお願いします。 プログラミングの経験はなく、HTMLくらいです。

  • C++Builder初心者の勉強法

    C++Builder初心者です。 プログラムといえばVBをかじった経験しかありません。 そんな初心者がC++Builderを理解したいのですが、 C++Builderは参考書籍が少なく困っています。 VC++のものを読んでも参考になるのでしょうか? また、VC++を読んだ場合、注意点等あるでしょうか?

  • C言語の勉強法

    C言語の勉強法で実用的なプログラムのソースが載っているサイトもしくは書籍はご存じないでしょうか? 種類はゲームやアプリケーションなどなんでもよく、作っておくとためになるようなものなら問いません。 自分のCプログラムのレベルは、C言語の入門書を終了し、じゃんけんプログラムや数当てゲームなどの簡単なプログラムを組めるようになった程度です。 それよりも、少し難しいプログラムを紹介してくださると大変ありがたいです。(厚かましいかもしれませんが…)

  • C#の勉強するにあたってのアドバイスをお願いします。

    こんにちは。 私はC#でのプログラミングを最近始めました。 入門書などを読んで少しはC#について理解をしてきたのですが、いざプログラミングをしようとするとどうしてよいのかよくわかりません。 私の今までの経験上、少し実用的であるプログラムを解説を理解しながら自分の手で書いていく方法が一番習得しやすいと思っています。 しかし、いざそれにあった本を探してもなかなか見つからず、Webサイトも見て回ったりはしているのですが、どうもしっくりくるものがありません。 プログラムを自分で書いて理解していくのにちょうどいい本やWebサイトを教えてください。 それと、もしあるのならこういう学び方をするのがいいよ。というアドバイスがあったら是非そちらもいただきたいです。 お願いします。

  • プログラミング(C言語)の勉強について

    情報系の大学1年生です。現在C言語のプログラミングの授業を受けています。 前期C言語の基礎を勉強したのですがいまだによくわかりません。 と、いいますのは、基礎の基礎のプログラムの書き方はわかりますが、難しくなると自分で書けないということです。 授業の課題が自力でできないので、友達のを写させてもらい(ほんとはいけないことはわかっています)、とりあえず提出し、あとでそのプログラムを理解する、というやり方で前期はなんとか乗り越えました。 現在、授業はアルゴリズムに入り、ますます授業についていけなくなり、情けない話ですが友達の書いたプログラムすら理解できないという状況です。 しかし、このままではまずいという思いと、もっと自分で思ったようにC言語を使えるようになりたいという思いから、今質問させていただいています。 C言語の入門書(柴田芒洋・明解 C言語入門編)を読んでいてもパソコンの知識が乏しいため、メモリや処理系など、何がどうなっているかわかりません。 ・C言語を理解するためにはある程度のパソコンの知識は必要ですよね? ・こんな私にも理解できるようなわかりやすい書籍はありますか? 今の自分の能力から考えて、授業の課題を一人でできるとは思いません。もちろん自分で書く努力はしていますが、コンパイルの時点で大量のエラー、実行してもきちんと結果がでません。エラーが出ればまだ修正できますが、実行しても結果がでない場合、自分でミスを見つけられません。 ・友達のプログラムを見せてもらって、後で理解するという勉強法には問題があると思っています。しかし、抜け出すにはどうしたらいいのでしょうか? ・本で勉強しても自分で書いてみなければ身につかないと思っているのですが、何からやればいいんでしょうか?ちなみにプログラムを書く環境はあります。 まとまりのない質問で恐縮ですが、ご指導よろしくお願いします。

  • C言語の基礎を勉強したいのですが。。。

    今C言語を独学で勉強しようとしています。 参考書や書籍を色々見て、試行錯誤してい いるのですが、イマイチ”ピン”ときません。 と言うよりは、C言語の分野自体に向いていない、 理解してないといったほうが正しいのかもしれません。 根本的に勉強したく、都合良すぎかもしれませんが、 関連のサイトやおすすめの本などありましたら是非 教えて下さい。簡単なプログラム自体あれば、参考に 記述頂けると幸いです。よろしくお願いします。