ページ 11

C++の勉強方法についての質問

Posted: 2016年10月25日(火) 19:39
by kuroneko
私はロベールのC++教室で勉強しており
第一部の72章までやりました
勉強方法は
大事な所や気が付いたところをノートにまとめたりして
あとで見やすいようにしております

私が不安なところは
教えられた内容を忘れてノートを見てしまうとこや
何か作っても最初に教わった内容しか使わなかったり
してしまうことです

何か改善点やこうしたらいいとかアドバイスをお願い致します。

Re: C++の勉強方法についての質問

Posted: 2016年10月25日(火) 20:15
by あんどーなつ
ロベールをやっているということはお金をかけたくないということですね。
私ができるアドバイスとしては、

1. クラスより先にファイルスコープを使えるようになったほうがいい。->Cの勉強
 Open BSDのソースコードを読むのがおすすめではあるけど・・・。
 Linuxのソースコードを読むのはGNU周辺を知ったうえじゃないとダメ。
 あとPICプログラミングとか?

2. クラスの勉強はC++よりもJavaやC#でやったほうがいい
 クラスを作るということはクラス設計ができないといけない。
 クラス設計といえばデザインパターンやUMLから入る人が多いけど、JavaとC#の標準ライブラリが
 クラス設計の正しいお手本になるから、クラスを作る前にライブラリを一通り使えるようになって、
 人の作ったクラスを頭に叩き込んでおかないといけない。
 C++でやりたいのなら、STLを勉強するという手もある(->C++プライマーを読む)

3. とにかくサンプルコードを打ち込みまくる
 猫でもできるWindowsプログラミングとか、猫でもできるシリーズはおすすめ。
 でも、たいていのソースコードは半分が動かない。動かなかったらあきらめてとっとと別のをやる。

4. MFCはWin32 APIとオブジェクト指向(上の2番)の知識が必要だからスルーする

5. DirectXプログラミングをやりたい場合は、まずC++でDLLを読み込む方法と
 COMプログラミングができないと無理だった気がする(私より詳しい人頼みます)

6. あと、プログラムの完成品をとにかく作る。本を読む時間とプログラムを作る時間を1:1くらいにする。
 ジャンケンプログラムでもジグソーパズルでもいいからとにかく作る。
 ソフトを公開する前には、特許庁の商標検索で、自分の作ったソフトの名前をほかの人が使っていないか
 チェックする

位かな。

Re: C++の勉強方法についての質問

Posted: 2016年10月25日(火) 21:13
by inemaru
あんどーなつ さんが書きました: 5. DirectXプログラミングをやりたい場合は、まずC++でDLLを読み込む方法と
 COMプログラミングができないと無理だった気がする(私より詳しい人頼みます)
個人的な所感です。

C++で(基本的な)処理を書く上では、自前でDLLを読み込んだりはしません。
(VSやDirectXの実装側でやってくれている為)

また、COMプログラミングに関して詳しく知っていなくても
関数の意味や3Dに関する知識があれば、普通にC++(よりC言語寄りだけども)が使える程度で
どうにかなりそうだと思います。
(専用の関数を使用するため、COMプログラミングを感じさせない作りになっている)

[hr]
以下は、C++の勉強方法について自分の考えです。

ロベールで紹介されている内容は、C++98と言って1998年に標準化された古い規約です。
C++を勉強するのであれば、基本文法を中心に
C++11以降(新しい規約)の参考書を使用した方が、良いかと思います。

理由
  • 基本構文が追加されている為、一気に覚えた方が効率が良い
    構造体やクラスの機能が追加されている為、finalやoverrideキーワードを使用する
  • C++98の古い規約は、C++11などの新規約では推奨されていないことがある
    例:NULL定数が0のため起こる事故を回避するためのnullptrキーワード
  • C#などの新しい言語にあるような機能が使用できる
    例:型推論 auto 型 (auto value = 0.1; // はdouble型 とか)
  • etc...
    他にもありますが、理由がない限りわざわざ古い規約で学習する必要はないでしょう。
江添亮さんがC++11の参考書を公開しているので、参考にするとよいです。
入門レベルから中級レベル以降まで学習できる内容がそろっています。
C++11参考書の公開:C++11の文法と機能

基本が固まった後は、自分が作りたいものを決めて
作るための情報を集めてコーディングしていけば、自然とプログラミングが身について行くと思います。
kuroneko さんが書きました: 私が不安なところは
教えられた内容を忘れてノートを見てしまうとこや
何か作っても最初に教わった内容しか使わなかったり
してしまうことです
何か作るときに、調べながらコーディングするのは普通だと自分は思います。
また、最初に教わった内容しか使ってないことに気づいた時点で、書き直しすれば良いでしょう。

Re: C++の勉強方法についての質問

Posted: 2016年10月26日(水) 11:27
by あんどーなつ
inemaruさん

DirectXのコメントありがとうございます。

気になったことがあるので、補足します。
新しい技術を学ぶことは素晴らしいことです。特にC++11の新しいコーディングスタイルは
C++の開発効率を向上させるので、是非勉強すべきです。

ただ、技術を勉強するときに新しいものにこだわるのは少し問題があります。
例えばDirectXについていうと、Windows7時代にDirect2Dというのができましたが、
これのサンプルコードはほとんどないので、私が現に困っています。
Direct3Dは割と昔からあるライブラリなのでサンプルに困ることはないでしょう。

しかし、Direct3D等のサンプルにしても、古いC++の文法で書かれていることがほとんどです。
だから、Direct3DかつC++11のサンプルだけをやるというようにこだわると何もできなくなります。

あとサンプルコードはわかりやすいことにこだわってください。Microsoftのサンプルは
行数が多すぎて(10000行程度)理解できないこともあります。こいつ言っていること適当だなーと
思っても、自分の持っている環境で動いて、行数が短いサンプルが神様です。
こういうのをインターネットとかでがんばって探して、写経しましょう。

Re: C++の勉強方法についての質問

Posted: 2016年10月26日(水) 12:04
by usao
>ノートを見てしまう

何かテストでも受けるのでなければ全く問題がないと思います.
なんというか,「覚えようと思って頑張って覚える」のではなく,
繰り返し書いていると「そのうち自然と覚えた」という感じで良いのではないでしょうか.

頭の中に全てが入っていればそれは便利でしょうけども,
「確かこれに関してはあそこに書いてあったな」とか把握していれば,必要な時に見ればよいです.
(可及的速やかに,確実に見れる手段が好ましいので,
 できればWebサイト頼りとかじゃなく,書籍的なものを保有する方が便利.
 なので,ノートの内容が頼もしいのなら,良いのではないかと思います.)



>何か作っても最初に教わった内容しか使わなかったり

よくわかりませんが…
「必ずこれを使え」みたいな決まりがある環境にいるのでなければ,別にいいのでは…?(問題点は何?)
>最初に教わった内容
とかいうので実現できているならば,それで十分なのかもしれませんし.

Re: C++の勉強方法についての質問

Posted: 2016年10月26日(水) 12:37
by inemaru
あんどーなつ さんが書きました: しかし、Direct3D等のサンプルにしても、古いC++の文法で書かれていることがほとんどです。
だから、Direct3DかつC++11のサンプルだけをやるというようにこだわると何もできなくなります。
まるで、C++11が別言語みたいな言われようですが、
新しいC++を知ったからと言って、古いC++が理解できなくなる訳じゃないです。
「何もできなくなる」というのは大げさな上に間違っています。

C++11はC++なのですから古いコードで書かれていても、
C++11のコンパイラでコンパイルできます。
あんどーなつ さんが書きました: ただ、技術を勉強するときに新しいものにこだわるのは少し問題があります。
例えばDirectXについていうと、Windows7時代にDirect2Dというのができましたが、
これのサンプルコードはほとんどないので、私が現に困っています。
Direct3Dは割と昔からあるライブラリなのでサンプルに困ることはないでしょう。
新しい技術のサンプルコードが少ないというのは、微妙に間違えで
DirectXの例で言うとサンプルやリファレンスはMSがGitHubなりMSDNなりに提供しています。

有志によるサンプルは、昔からあるものの方が多いですが
最低限の使い方は、提供されているはずなので
関数リファレンスを見て自分で考える作業が必要になるということです。
オフトピック
Direct2Dに関してですが、サンプルこそネット上には少ないかもしれませんが
GDIの延長線上にあるものなので、関数リファレンスを見ればどうにかなるはずです。
シェーダー周りに関してもDirect3Dについてわかっていれば、扱えるはずです。

Re: C++の勉強方法についての質問

Posted: 2016年10月26日(水) 13:27
by あんどーなつ
Githubはあまり見ていないので、C++11のコードがたくさんあるかもしれないですね。

Direct2Dについていうと、
エディフィストラーニング株式会社 矢島聡著「プロフェッショナル Visual C++ 2010」に
描画関数(直線、楕円、etc)の説明とGDI互換機能の説明があったので、そこまでは理解しています。
ただ、Direct2Dを本格的に使うにはWIC(Windows Imaging Component)を使用する必要があり、
これにてこづっていたわけです。

また、Direct2DはDirect3Dの上位レイヤーになりますが、WPF(Windows Presentation Foundation)も
Direct3Dの上位レイヤーになるので、Direct2Dの習得はWPFとDirect3Dを習得してからにしようかと考えています。
または2, 3年のうちにわかりやすい解説がなされるかもしれません。
とはいえWPFもWindowsフォーム(.net)ほど情報量があるわけではないので初心者にWPFからやってくださいと
勧められるわけでもないです。

そういえばWindows10からユニバーサルWindowsプラットフォーム(UWP)が導入されましたが、
あれこそ無理ーって思いました。

Re: C++の勉強方法についての質問

Posted: 2016年10月26日(水) 21:23
by kuroneko
取り合えずアドバイスを参考に頑張ってみたいと思います
ありがとうございました