環境
OS:Vista
コンパイラ:Microsoft Visual C++ 2008 Express Edition
コンパイラはC++なのに実際はCしか知らない現状です。
以前からC++ってなんだろ。と興味があり、本屋でC++の本を見てみた事が何度もあります。
しかし、何ができるか、何をしてるか、など さっぱり分からず、良い本なのかすら分かりません。
初心者でも分かる(できれば)本や、サイトを知ってる方が居れば
ぜひ教えてもらいたいです。
#知りたい内容は
・C++では何ができるのか?
(一応プロジェクト作成時のテンプレート的なものは出来そうだと予想してるのですが)
・Microsoft Visual C++ 2008 Express Editionの使い方。
・プログラムの書き方。
どこかで、C++はライブラリを作るのに適してると見たような記憶があるのですが
可能なら、DXライブラリを自分なりに削減して再ライブリ化(?)したいです。
いまいち伝えたい事を上手く伝えれてないのですが、C++でできる事を学びたいと思ってます。
C++について(勉強方法など)
Re:C++について(勉強方法など)
私は林晴比古著新C++入門という入門書で勉強しました。
私の持っている版ではSTLなどの説明が殆どないことを除けば、分かりやすく必要十分な内容だと思います。
HPなどでは「猫でも分かるプログラミング」が大変参考になりました。
私も、高校生くらいのとき初めてC言語というものを知り、入門書がぼろぼろになるまで読みましたが、
「じゃあ、具体的に何ができるのか」「どうしたらできるのか」
などさっぱり分からなかった記憶があります。(で、一度プログラミングからは離れました)
何ができるのかといえば、私たちが想像のつくプログラムはなんでもできるのではないでしょうか。
コンソール(DOS窓)用のプログラムなら、特に用意するものはないですが、
windowsでプログラムを造る場合はWindowsのAPIを、ゲームを造るならDirectXを勉強しなければなりません。
Visual C++などで、プログラムの骨組みを作ってくれる機能を使うにはまた勉強が必要です。
ちなみに、私はどれも勉強していません。ので、便利なゲーム用ライブラリ「DXライブラリ」を使っています。
C++言語は、イメージとしては従来のC言語の拡張版、クラス機能による分かりやすく安全性の高いプログラム作成ができ、STLなどの便利な標準クラスライブラリがある。などが特徴かなとおもいます。
私の持っている版ではSTLなどの説明が殆どないことを除けば、分かりやすく必要十分な内容だと思います。
HPなどでは「猫でも分かるプログラミング」が大変参考になりました。
私も、高校生くらいのとき初めてC言語というものを知り、入門書がぼろぼろになるまで読みましたが、
「じゃあ、具体的に何ができるのか」「どうしたらできるのか」
などさっぱり分からなかった記憶があります。(で、一度プログラミングからは離れました)
何ができるのかといえば、私たちが想像のつくプログラムはなんでもできるのではないでしょうか。
コンソール(DOS窓)用のプログラムなら、特に用意するものはないですが、
windowsでプログラムを造る場合はWindowsのAPIを、ゲームを造るならDirectXを勉強しなければなりません。
Visual C++などで、プログラムの骨組みを作ってくれる機能を使うにはまた勉強が必要です。
ちなみに、私はどれも勉強していません。ので、便利なゲーム用ライブラリ「DXライブラリ」を使っています。
C++言語は、イメージとしては従来のC言語の拡張版、クラス機能による分かりやすく安全性の高いプログラム作成ができ、STLなどの便利な標準クラスライブラリがある。などが特徴かなとおもいます。
Re:C++について(勉強方法など)
DXライブラリを改変するとすれば、まず、DXライブラリのコードをみて理解できる必要があります。
そのためには、WINDOWSAPIやDIRECTXAPIなどの知識も必要となります。
ライブラリの機能を削減するべきシチュエーションがあるかどうかは分かりませんが。
ライブラリを自分好みの仕様にするということであれば、
ライブラリの必要な機能を使って、自分好みのクラスや関数を作ることで実現できます。
この場合、ライブラリの全ての機能が使えて、さらに、自分だけの機能をつけられます。
そのためには、WINDOWSAPIやDIRECTXAPIなどの知識も必要となります。
ライブラリの機能を削減するべきシチュエーションがあるかどうかは分かりませんが。
ライブラリを自分好みの仕様にするということであれば、
ライブラリの必要な機能を使って、自分好みのクラスや関数を作ることで実現できます。
この場合、ライブラリの全ての機能が使えて、さらに、自分だけの機能をつけられます。
Re:C++について(勉強方法など)
C++ での利点の一つとして、構造体をオブジェクトとして扱い、オブジェクトに対して行う関数を楽に扱えることです。
たとえば、
(標準出力の部分も C++ にすべきだとは思いますが、そこはそのままにしておきました)
StructData に対して行う関数群を、メンバ関数として持つことができ、グローバル関数の数を減らしたり、
継承(元となるクラスの機能や変数を受け継ぐこと)によって機能などの拡張を容易にすることができます。
STGに例えると、ゲーム中、現在位置などを持つ基本クラスがあり、
それに位置情報等の変数、それらを扱う関数が定義されているとします。
この基本クラスを継承した自機クラス、敵クラス、弾クラスなどを定義します。
このとき、基本クラスの持つメンバ変数・メンバ関数は継承された各クラスでも使用することができます。
つまり、いちいち同じ処理を書かずにすみます。
他にも説明すべき点(public:とか)がありますが、 C++ のさわりということで。
VC++は特に(オプションでCソースとしてコンパイルする設定をしていない限り)変更せずに
C++ コードをコンパイルすることができるはずです。
あと、 C++ がライブラリに適している、というのは、
クラス単位で機能を提供できる点と、
C と比べると、比較的書くコード量が少なくて済む、
というのが理由ではないでしょうか。
(継承して拡張できるというのもありますね)
DXライブラリを C++ 化できれば、そのライブラリを使うソースコードが結構すっきりすると思いますよ。
どちらかといえば C ライブラリをカプセル化した C++ ライブラリを作るほうが楽ですが。
私はここに書くほど C++ をバリバリ使っているわけでは無いので、
詳しい利点やオススメの本の紹介などは他の方々に任せます…。
たとえば、
#include <stdio.h> typedef struct StructData { int intData; float floatData; } StructData; void StructDataInit( StructData* data, int intData, float floatData ){ data->intData = intData; data->floatData = floatData; } void SetStructDataInt( StructData* data, int intData ){ data->intData = intData; } void SetStructDataFloat( StructData* data, float floatData ){ data->floatData = floatData; } int GetStructDataInt( StructData* data ){ return data->intData; } float GetStructDataFloat( StructData* data ){ return data->floatData; } int main( void ){ StructData data; StructDataInit(&data,12,3.45f); printf("int:%d\nfloat:%f\n",GetStructDataInt(&data),GetStructDataFloat(&data)); SetStructDataInt(&data,67); SetStructDataFloat(&data,8.90f); printf("int:%d\nfloat:%f\n",GetStructDataInt(&data),GetStructDataFloat(&data)); return 0; }これと同じことを C++ にすると、
#include <stdio.h> class StructData { int intData; float floatData; public: StructData( int intData, float floatData ){ this->intData = intData; this->floatData = floatData; } void Set( int intData ){this->intData = intData;} void Set( float floatData ){this->floatData = floatData;} int GetInt( void )const{return this->intData;} float GetFloat( void )const{return this->floatData;} }; int main( void ){ StructData data(12,3.45f); printf("int:%d\nfloat:%f\n",data.GetInt(),data.GetFloat()); data.Set(67); data.Set(8.90f); printf("int:%d\nfloat:%f\n",data.GetInt(),data.GetFloat()); return 0; }このようになります。
(標準出力の部分も C++ にすべきだとは思いますが、そこはそのままにしておきました)
StructData に対して行う関数群を、メンバ関数として持つことができ、グローバル関数の数を減らしたり、
継承(元となるクラスの機能や変数を受け継ぐこと)によって機能などの拡張を容易にすることができます。
STGに例えると、ゲーム中、現在位置などを持つ基本クラスがあり、
それに位置情報等の変数、それらを扱う関数が定義されているとします。
この基本クラスを継承した自機クラス、敵クラス、弾クラスなどを定義します。
このとき、基本クラスの持つメンバ変数・メンバ関数は継承された各クラスでも使用することができます。
つまり、いちいち同じ処理を書かずにすみます。
他にも説明すべき点(public:とか)がありますが、 C++ のさわりということで。
VC++は特に(オプションでCソースとしてコンパイルする設定をしていない限り)変更せずに
C++ コードをコンパイルすることができるはずです。
あと、 C++ がライブラリに適している、というのは、
クラス単位で機能を提供できる点と、
C と比べると、比較的書くコード量が少なくて済む、
というのが理由ではないでしょうか。
(継承して拡張できるというのもありますね)
DXライブラリを C++ 化できれば、そのライブラリを使うソースコードが結構すっきりすると思いますよ。
どちらかといえば C ライブラリをカプセル化した C++ ライブラリを作るほうが楽ですが。
私はここに書くほど C++ をバリバリ使っているわけでは無いので、
詳しい利点やオススメの本の紹介などは他の方々に任せます…。
Re:C++について(勉強方法など)
DXライブラリを改変するより、最初はDXライブラリのラッパーライブラリを作る方がよいでしょう。
ラッパーを作れば、DXライブラリの細部まで理解が及びますし、その過程でラッパーの限界も見えてくるはずです。
それを踏まえて再設計する方が、結局は近道ではないでしょうか?
ラッパーを作れば、DXライブラリの細部まで理解が及びますし、その過程でラッパーの限界も見えてくるはずです。
それを踏まえて再設計する方が、結局は近道ではないでしょうか?
Re:C++について(勉強方法など)
> ・Microsoft Visual C++ 2008 Express Editionの使い方。
「Microsoft Visual C++ 2008 Express Editionの使い方」でググると色々でてくる。
先ほどのトップ2つは次の通り。
http://cvwww.ee.ous.ac.jp/vc08prog.html
http://homepage3.nifty.com/ishidate/vcpp.htm
どちらも非常に丁寧に書かれているので、つまづくことは多分ないと思う。
万一うまくいかなかったら、ここででも再度聞いたら良いでしょう。
プログラミングはじめての人が独学でやろうとすると、
1つめのプログラムを実行するまでが意外に高いハードルだと思います。
それさえクリアできれば、後は入門書でも入門サイトでも見れば先に進めます。
「Microsoft Visual C++ 2008 Express Editionの使い方」でググると色々でてくる。
先ほどのトップ2つは次の通り。
http://cvwww.ee.ous.ac.jp/vc08prog.html
http://homepage3.nifty.com/ishidate/vcpp.htm
どちらも非常に丁寧に書かれているので、つまづくことは多分ないと思う。
万一うまくいかなかったら、ここででも再度聞いたら良いでしょう。
プログラミングはじめての人が独学でやろうとすると、
1つめのプログラムを実行するまでが意外に高いハードルだと思います。
それさえクリアできれば、後は入門書でも入門サイトでも見れば先に進めます。
Re:C++について(勉強方法など)
皆さん参考になりました。
>猫猫さん
本屋を数件回ってきたのですが、やっぱりC++の本自体良い本が見当たりませんでした。
猫でも分かるプログラミングの紹介もありがとうございます。
以前も見た事はあったのですが、2章くらい読んで、そのままでした。
>たいちうさん
環境が同じでとても参考になります。
>御津凪さん
C++の書き方を分かりやすく書いてくれてありがとうございます。
正直クラスやオブジェクトから分かりませんが、そのうち分かるようになりたいです。
>たかぎさん
改変というか、使わない関数(?)などを、削除して容量を削減できれば良いなと思ってます。
以前このようなスレを見たので。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... iew&no=984
>猫猫さん
本屋を数件回ってきたのですが、やっぱりC++の本自体良い本が見当たりませんでした。
猫でも分かるプログラミングの紹介もありがとうございます。
以前も見た事はあったのですが、2章くらい読んで、そのままでした。
>たいちうさん
環境が同じでとても参考になります。
>御津凪さん
C++の書き方を分かりやすく書いてくれてありがとうございます。
正直クラスやオブジェクトから分かりませんが、そのうち分かるようになりたいです。
>たかぎさん
改変というか、使わない関数(?)などを、削除して容量を削減できれば良いなと思ってます。
以前このようなスレを見たので。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... iew&no=984
Re:C++について(勉強方法など)
GPGAさんありがとうございます。
とりあえず、たいちうさんが紹介してくれてるサイトで頑張ってみて、勢いに乗れれば読んでみたいと思います^^
とりあえず、たいちうさんが紹介してくれてるサイトで頑張ってみて、勢いに乗れれば読んでみたいと思います^^