アブナイお兄ちゃんによるオンラインC++言語講座 ボチボチやっていこうかなと思います 更新は気まぐれなので期待しないでください 初級者向け+覚書もあるので過度な期待は禁物 なぜC++か? この辺のことはローテクさんの方が詳しいですが C++はとりあえず処理が速い!!これに尽きます。 もうひとつはハードウェアに近いということ C言語ではできないオブジェクト指向という概念が導入されています (オブジェクト指向については後述します) なおかつ、C言語の文法がほぼ全て使えます(ぉ (したがって、C言語の文法はある程度わかる人がこの講座の対象者になります) JavaはサーブレットやアプレットWeb系に強いなどの特徴がありますが C、C++言語は同じコード内にアセンブラ言語を書けたりなど 低級な言語に密接な関係があります。 (どこがどのように密接なのって問い詰められるとボロがでそうなのでこの話はこの辺で) というようなC++言語に特徴があるわけですが まぁ・・・C++言語は低級な言語にも近い高級言語というわけで めんどくさいことも色々多いわけです たとえば、動的なメモリ管理とかはJavaとかC#のような 高級言語にあるガベージコレクションみたいな機能がないので 自分でしなきゃいけないし(動的なメモリって何よ!?それはあとで説明を・・・ごにょごにょ ぁ、この講座はアブナイお兄ちゃんの独断と偏見よる初心者向け講座なので コンソールアプリケーションのみのプログラム(黒画面のみ)を扱うよ あとコードが全ての環境において正しく動作するかの保障はできない(マテ VisualStudioの旧バージョン(2003以前)は動く保障はできません この講座では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 << なんとか(変数とか、文字列) なんとかの部分にコンソール画面に出力させたいものを書きます 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派と分かれるとこなのでどっち使うかはお好みで・・・ つぎは入力のほう // 標準入力 #include <iostream> using namespace std; int main() { int a,b,c; cin >> a; cout << "a = " << a << endl; // 連続で入力する場合 // bに入力してcに入力する cin >> b >> c; cout << "b = " << b << " c = " << c << endl; } cin関数は >> で変数に値 C言語のgets関数とかとほぼ同じだけど cin関数に >> 連続で使うことで連続で入力していける ぁ、そういえばCTRL + SPACEキーっていうアクセラレータキー (いわゆるVisual Studioで使えるコマンド)をみんな知っているかい? これをセットで押せば(インクルードしているヘッダーファイルの)既存の関数や 自分でコードの途中で宣言した変数などを列挙してくれる この機能をインテリジェンスというんだけど知っておいて絶対損はないので 長ったらしい関数や変数のときは(あと関数名を途中までで忘れた場合)ぜひ試してみてほしい if文、for文、while文、do while文、switch文などはC言語とまったく同じなので飛ばし では、いきなり オブジェクト指向って何よ?って話をします。 オブジェクト指向の利点は継承?、ポリモーフィズム?、カプセル化? とか巷でよく書かれている参考書が多いけど、何のこっちゃ?っていわれても なんだかんだ実際コードを打って体感してもらったほうが速いんだよね・・・ (自分も最初そうでしたし) classというキーワードを使います #define _CRT_SECURE_NO_WARNINGS #include <string.h> #include <iostream> using namespace std; class MyClass { int a; float b; public: char c[256]; // クラス内部の変数(a,b)を表示する void Show() { // クラス内ならどの変数でも書き換え可能でどのクラス内の関数も呼び出し可能 a = 5; b = 10.6f; cout << "a = "<< a << " b = " << b << endl; cout << c << endl; } };// ←「;」 をよく忘れる人がいるので注意 int main() { MyClass mc; strcpy(mc.c,"public:以降の変数は外部から書き換え可能"); mc.Show(); return 0; } MyClassというのは自分で定義した新しい変数型になるので main関数で使えるようになります。 クラス内の関数や変数にアクセスするためには「.」が必要になります。 ↑の例だとmc.Show()でShow関数を呼び出している これはC言語での構造体の内部変数(関数)呼び出しと同じです。 純粋なC言語だとclassというものは存在しないし、 自分で新しい型を定義するにはtypedefキーワードつけないといけないんだけどね (これはC++だから気にしなくておk) public:というのはpublic:と書かれたところ以降で宣言された変数や関数を 外部から直接入力できます (C言語的にはどこからでも書き換え可能なのは当たり前な概念だったかもしれないけど、 C++言語的には、外部から書き換えできない変数もあるんだよってことを知っておいてください) private:というキーワードもあるけど、これは このクラス内部でしかクラス内で宣言した変数や関数が使えないよ〜ってことです。 ためしにmain関数のほうでmc.a = 5;とやってみてください、アクセスできないっていう コンパイルエラーになるはずです。 classでは何も書かないと自動的にprivateとして扱われるので注意です。 (つまりは外部から呼び出したり書き換えたりできない) このように、外部から書き換えたり呼び出したりを制限して、 クラス内の変数の値などを保守することを カプセル化といいます。 #vote((^ω^)わかったお[35],普通[1],。(`ω´#)。わかりにくぃぜぇえええええ[1]) ちっとキリが悪いけど、ここでキリ上げ、次回更新はいつかな〜・・・