MENU

C++やろうぜ(Part1)

こんにちは、ごまあぶらです。

今の時代、プログラミングなんかAIにまかしときゃいいんですが、それよりも自分で書けたほうがかっこよくないですか?というわけでやります。

私はC++ガチ初心者ですが、Javaをちょっとだけやったことがあります。初心者が何言ってんだと思っても許してください。

目次

C++のいいところとかあるんか

・コンパイル言語なので処理が速い!

・直接メモリを制御できる!

・いろんな環境で動作する!

でも

・コンパイル言語=エラーが見つけにくい

・直接メモリを制御できる=自分でメモリ制御をしないといけない

+なんか知らんけど構造が複雑

にもつながりますね。

でも、エラーの見つけにくさはAIが解決してくれるでしょう。え?コーディングもAIが解決してくれる?そんなことをいう人はこんな辺境ブログ見に来るはずがありません。無視します。

メモリ制御は頑張ります。構造も知恵の輪解けるので行けます。じゃあデメリットないですね!

環境をつくろう

今回はVisual Studioで行きたいと思います。

とりあえずインストーラーをダウンロードしてインストールしました。

windows用のインストーラーのリンク↓

https://visualstudio.microsoft.com/ja/vs/features/cplusplus

インストールできたと思ったらデスクトップにも現れずにどっか行ってしまったので、検索で検索してタスクバーに固定しときました

サインインを求められたのでとりあえずmicrosoftアカウントを指定して、環境は全般にしました。

こんな画面になったので、新しいプロジェクトの作成をとりあえずやります。

テンプレートとかあるんですね。とりあえず空のプロジェクトを選んどきます。

ソリューション名ってなんだ?と思い、とりあえずAIに聞いてみたところ、本で例えるとソリューション名が本棚で、プロジェクトが本、プロジェクトに入ってるのがソースコードがページみたいな感じらしいですよ。ということは、同じディレクトリに配置してたらソリューション名の意味あるんか?となりそうだったのでチェックは入れないでおきました。

ソリューション名をoryouri、プロジェクト名をsennmonnchにしましたが、これには深い訳がないです。適当に決めました。

いかにもプログラミングできそうな画面になりましたが、肝心のコードが欠けるファイルがないですね。というわけなので作ります。

右に出ているソリューションエクスプローラーに出ている、ソースファイルを右クリック→追加→新規項目でC++用のファイルを作れました。

ソリューションエクスプローラーを閉じてしまったときは、一番上に並んでいるところの表示をクリックして、ソリューションエクスプローラーをクリックするとまた出てきました。ついでに画鋲をクリックしておくと消えなくなりました。

もう一つファイルを作る方法を発見しました。

ファイル・編集・表示みたいに並んでいる一つ下にある、緑色の+マークがついてるところをクリックすると、ファイル作成画面に行きます

これ、左のところが最初全般が選ばれていると思うので、そこから下にあるVisual C++を選択すると、上みたいな画面になってC++ファイルを作れます。ですが、これはさっきみたいな感じでまだプロジェクトの方に紐づけされていないので、このまま終わると保存はできますが、プロジェクトに表示されません。

なので、保存をさっき作ったプロジェクトのファイルにしてから、ソリューションエクスプローラーに出てたソースファイルを右クリックし、追加→既存項目で保存したファイルを指定するとプロジェクトに表示されます。くそめんどいのでcppファイル以外を追加したい時くらいしか使わないんじゃないでしょうか。

次は書くぞ!と言いたいところですが、その前に

ソースファイルとヘッダーファイルの違い何なん?

さらっと出てきていた謎のファイル、ありましたね。外部依存関係とリソースファイルはそれぞれどっかから持ってきたやつを入れるところ、画像とかを入れるところと分かりますが、ソースファイルとヘッダーファイルは何を入れるん?となりました。

というわけで調べてみたところ、ソースファイルに具体的な処理が書かれているcppファイルを入れて、ヘッダーファイルに処理の概要がかかれているhファイルを入れるそうです。

これで意味わかった人は尊敬します。これだけじゃ意味わからんです。私はだいぶAIとおしゃべりしてわかった気になりました。

投げる処理と走る処理を別々のファイルに作って、それらを組み合わせて使いたいとします。

このとき、C++ではファイルごとにコンパイルしていくため、別のファイルにある処理を使うには、「そこにどんな関数があるのか」を先に知っておく必要があります。

そこで使うのがhファイルです。

hファイルには、「このファイルにはこういう関数があります」という宣言を書いておきます。そして、使いたい側で #include することで、その宣言を読み込めるようにします。

もちろん、hファイルがないと処理できないわけではありません。hファイルに書くような宣言を、使う側のcppファイルに直接書いても動きます。

ただ、プログラムが大きくなると、同じ処理をいろいろなファイルから使うようになります。そのたびに同じ宣言を書くのは大変なので、宣言をhファイルにまとめて、必要なファイルから #include して使うわけです。

つまり、hファイルは「処理そのもの」ではなく、「他のファイルに、この処理はこういうものですよと教えるためのもの」と考えると分かりやすいです。

AI作。

コンパイルの壁で合体から見ると(ファイルごとに読み込むため)走ると投げるは見えない。

でも宣言でその壁を越えて見ることができるようになる。

hファイルはその宣言が書いているところなので、これを参照することで壁を越えられるようになる。

hファイルがなかった場合、合体に走ると投げるの宣言を書くことによって実行はできる。

でも毎回宣言を書かないといけないので大規模になればなるほどめんどくさくなったり宣言の書き忘れが発生する可能性が上がる。

といった感じだと思います。

だいぶ脱線しましたが、

とりあえずコード書いてみよう

勉強するにしても何をやるかを決めないと何にもできないっすね。C++はくそむずいだけでできないことはなさそうなので、ゲームとかソフトウェアとかいろいろできそうです。

ずっと家計簿を作りたいと思ってたので、C++の勉強は家計簿アプリを作ることを最終目標としたいと思います。

Hello,world!!!(いつもの)

プログラミングの最初といえばこれ。コードの書き方を全く知らないので、とりあえずコピペでもしてきます。

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

検索したらAIが出してました。

::とか<<とか、なんだこれと思うものが結構ありますね。

include

これはこれで指定したファイルの内容をそのまんま持ってくる(読み込む)時に使うやつ見たいですね。

上のhello worldで行くと、iostreamの内容をそのまんま読み込んでます。

int main(){return 0;}

C++では、一番最初に起動する処理(クラス)はmain()と決まっているみたいですね。intは処理が終わった後に整数を返すぜ!という意味なので、int main()は、これを一番最初に起動して、終わったときに整数を出すよって感じだと思います。

return 0;は、整数を出すよのところを0出すよって書いてるだけですね。

std::cout << “Hello, World!” << std::endl;

includeしているiostreamが関係してそうですね。

iostreamは調べた感じ基本的な処理パックみたいな感じでstd::(名前空間)を処理名の前につけて使うみたいです。

ルールとして、入力するときは<<、出力するときは>>をつけないといけないと思われます。

std::coutとかはcoutがやってる処理って感じですね。

coutが文字とか数値を出力するやつで、たぶんjavascriptとかでいうLogger.logみたいな感じでしょうか。単純に文字出すだけなので、多分あんまり使う機会ない気がします。

endlは改行とフラッシュを同時にやるみたいですが、フラッシュってなんすか?

C++は、処理を効率化するために、処理したことをバッファとして一回ためておいて、一気に出すみたいな処理をすることがあるらしいです。

フラッシュは、バッファの中身全部出してくださいねの意味みたいです。

何気に結構処理に時間がかかるみたいなので、改行したいだけだったら/n(改行するよ)を使ったほうがよさそうです。

ということは、endlなくても動くんじゃね?ということでやってみました。<< std::endlまで削除です。

#include <iostream>

int main() {
    std::cout << "Hello, World!";
    return 0;
}

動きましたね。

…ところで、名前空間って何でしょうか?さらっとstd::のところで出てきていました。

おんなじ名前の処理が出てきても大丈夫なように、処理名の前にstd::とかをつけて差別化しているみたいです。そういえばJavaでもこんな感じでした。これを省略する方法もありそうですが、めんどくさいのでこれはまた同じようなのが出てきたらにします。

疲れたので今回はこんなもんにしときます。続きはまた今度。保存して終了します。

まとめ

今回は

  • ソースファイルとヘッダーファイルの違い
  • Hello world!

ぜんぜんすすんでねえ。

でもここまで書くのに3日くらいかかってるんで、そんなに頻度上げられないかもしれないです。

コメント

コメントする


目次