アブナイお兄ちゃんによるオンラインC++言語講座 ボチボチやっていこうかなと思います 更新は気まぐれなので期待しないでください 初級者向け+覚書もあるので過度な期待は禁物 なぜC++か? この辺のことはローテクさんの方が詳しいですが C++はとりあえず処理が速い!!これに尽きます。 もうひとつはハードウェアに近いということ 最後にC言語ではできないオブジェクト指向という概念が導入されています (オブジェクト指向については後述します) なおかつ、C言語の文法がほぼ全て使えます(ぉ (したがって、C言語の文法はある程度わかる人がこの講座の対象者になります) JavaはサーブレットやアプレットWeb系に強いなどの特徴がありますが C、C++言語は同じコード内にアセンブラ言語を書けたりなど 低級な言語に密接な関係があります。 (どこがどのように密接なのって問い詰められるとボロがでそうなのでこの話はこの辺で) というようなC++言語に特徴があるわけですが まぁ・・・C++言語は低級な言語にも近い高級言語というわけで めんどくさいことも色々多いわけです たとえば、動的なメモリ管理とかはJavaとかC#のような 高級言語にあるガベージコレクションみたいな機能がないので 自分でしなきゃいけないし(動的なメモリって何よ!?それはあとで説明を・・・ごにょごにょ ぁ、この講座は時間がない&めんどくさい&アブナイお兄ちゃんの独断と偏見と実験による初心者向け講座なので コンソールアプリケーションのみのプログラム(黒画面のみ)を扱うよ あとコードが全ての環境において正しく動作するかの保障はできない(マテ VisualStudioの旧バージョン(2005以前)は動く保障はできません あと、正直mixiとかのほうに覚書でガリガリなんか書くことのほうが多いので mixi持ってる計算メンバーはぜひ登録をば・・・ http://mixi.jp/show_profile.pl?id=10256491 (実はこっちのほうが目的だったり・・・) この講座ではC++言語がC言語と比べてどこがパワーアップしているのかをみていこうと思います。 まずは標準出力(コンソール画面への出力)が若干違う C言語講座同様プロジェクトを作ってmain関数をとりあえず作る準備をして ↓のコードを打ってもらいたい(こぴぺでもかまわんよ // C++での標準出力(コンソールアプリケーション) // main.cpp(←拡張子がcppというのはC++言語の文法が使えることを示している) #include <iostream> using namespace std; // 名前空間、とりあえずここではおまじないだと思って int main() { int a = 5; cout << "c++ではストリームで書くことができる" << endl; cout << "連続で" << a << "←変数の値もだせるよ" << endl; return 0; } // ↑ここまで cout << なんとか(変数とか、文字列) なんとかの部分にコンソール画面に出力させたいものを書きます << を使えばいくつでも連続で出力させることができます。 endlは改行です。coutとセットで使います。 で、 using namespace stdって何よ? といわれるとさっきのコードは ↓のコードでも同じものになる #include <iostream> int main() { int a = 5; std::cout << "c++ではストリームで書くことができる" << endl; std::cout << "連続で" << a << "←変数の値もだせるよ" << endl; return 0; } // ↑ここまで std:: ってトリアエズ打ってみてほしい、すると通常はなんかいっぱい関数が列挙されるはず (出ない人は若干待ってみるか打ちなおしてみてほしい) 名前空間については詳しくは説明はここでは省く(おぃ ここではstdっていう名前空間にC++の標準的な関数が格納されているんだなと思ってくれればかまわない んで、using namespace std;ってやると std::のところを省略できるんだな程度でおk ちなみに cout関数(変な書き方してるけどこれ関数なの?←はあとで説明)はC++でしか使えないんだけど もちろん、C言語のprintf関数も使える #include <stdio.h> int main() { int a = 5; printf("c++ではストリームで書くことができる"); printf("%s%d%s","連続で",a,"←変数の値もだせるよ"); return 0; } 何がいいのかっていうと%dとか%sとか(マニピュレーターという)を考えなくっていいってことだね ただし、coutだと書式指定がメンドクサイというか慣れにくい(←の使い方は後述・・・しないかも まぁ、この辺はprintf派と分かれるとこなのでどっち使うかはお好みで・・・ ぁ、そういえばCTRL + SPACEキーっていうアクセラレータキー (いわゆるVisual Studioで使えるコマンド)をみんな知っているかい? これを使えば(インクルードしているヘッダーファイルの)既存の関数や 自分でコードの途中で宣言した変数などを列挙してくれる この機能をインテリジェンスというんだけど知っておいて絶対損はないので 長ったらしい関数や変数のときは(あと関数名を途中までで忘れた場合)ぜひ試してみてほしい if文、for文、while文、do while文、switch文などはC言語とまったく同じなので飛ばし では、いきなり オブジェクト指向って何よ?って話をします。 オブジェクト指向の利点は継承?、ポリモーフィズム?、カプセル化? とか巷でよく書かれている参考書が多いけど、何のこっちゃ?っていわれても なんだかんだ実際コードを打って体感してもらったほうが速いんだよね・・・ (自分も最初そうでしたし) classというキーワードを使います #include <iostream> using namespace std; class MyClass { int a; float b; // クラス内部の変数(a,b)を表示する Show() { a = 5; b = 10.6f; cout << "a = "<< a << b << end; } };// ←「;」 をよく忘れる人がいるので注意 int main() { MyClass mc; mc.Show(); return 0; } MyClassというのは自分で定義した新しい変数型になるので main関数で使えるようになります。 クラス内の関数や変数にアクセスするためには「.」が必要になります。 ↑の例だとmc.Show()でShow関数を呼び出している 純粋なC言語だとclassというものは存在しないし、 自分で新しい型を定義するにはtypedefキーワードつけないといけないんだけどね (これはC++だから気にしなくておk) ちっとキリが悪いけど、ここでキリ上げ、次回更新はいつかな〜・・・