Javaプログラマの趣味ブログ

勉強の記録。基本的にUnityとC++の勉強をしてます。

cin/cout

今日も一日お疲れ様でした。

 

皆さんはどんな1日でしたか?

僕は他社の社員の方と転職したいねーって雑談をしていて、

何故かその流れでその人のツテから

さらに別の他社さんの面談をする話が進んでいって笑ってしまいました。

というわけで、多分今度面談受けてきます。

人脈って大事ですね。

 

さて、今日のC++はcinです。

C inputで覚えましょう。

前回はcoutでコンソールにハロワをしましたね。

今回は逆に、コンソールからプログラムに文字を投げるという処理になります。

 

cinの使い方も基本的にはcoutと同じような感じです。

以下ソース

f:id:faule:20190513232245p:plain

 

今回の内容としては5行目と7行目になります。

 

5行目ではstring型のstrを初期化せずに呼び出しています。

Cと違い、C++のstringは初期化せずに宣言しても安全なのが嬉しいです。

 

さて、5行目の時点ではstrの中身は何もありません。

代入がないので当然ですね。

プログラム内であればstr = "a"のように代入を行いますが、

キーボードからの入力でそれを行ってくれるのが7行目のcinになります。

7行目は「str = キーボードで入力された文字列」ということです。

iostreamは前回の通り入出力に関するライブラリなので、

当然入力のcinについてもstdに同梱されています。

 

この関数を使えばscanfで一瞬わかった後に問題があると言われて???となる必要もありません。

(C言語のcinにあたるscanfは色々な問題を抱えています。

語ると長くなるので、興味のある人はwikiで調べてみてください)

 

今回の内容としては以上になります。

個人的な事情でプライベートUnityおじさんになっているので、

記事の内容が薄いのは許して頂きたく。

おじさんは何故か発生しないコリジョンの原因究明で忙しいのです。

あんまり詰め込んでも忘れて穴ができますしね。

 

次回はプログラムの流れについて書こうかと思います。

 

では、また明日。

Hello World!

今回はプログラミング学習の基本、Hello Worldについて解説します。 

Hello Worldはどのプログラミングの解説書でも必ず最初に行う儀式みたいなものです。

※環境構築やコンパイル方法については記載していません。

 WindowsであればVisual StudioMac OSであればXcodeでやるといいと思います。

Visual Studio

qiita.com

 

Mac OS

qiita.com

 

 

今回はCとC++の違いを実感するため、

CとC++Hello Worldを書いて、ちょっと比較してみましょう。

 

 

CでのHello World

 

f:id:faule:20190513013641p:plain

1行目はライブラリの指定です。

standard input outputの略になります。

入出力に関するライブラリです。

この中に入っている処理(今回だとprintf)を使いますよ、という宣言なので、今回はあまり理解する必要はないです。

 

2行目ではC言語ではデフォルトでString(文字列)が設定されていないため、

typedefでchar配列として型Stringを定義しています。

 

プログラミングをやっている方は4行目のmain(void)に

違和感を感じる方もいるかと思いますが、

Cで引数なしをmain()と書くのはご法度です。

この記載では引数として可変長変数を取るという書き方になるためです。

 

また、6行目でprintfで%sを使ってString変数の位置を指定しています。

ちょっとわかりにくいですね。

例えば""の中身を"strの中身は%sです¥n"にした場合、

「strの中身はHello World!です」と表示されます。

¥nは改行コードというもので、ここで改行しますよ、という意味です。

試しに外してみると改行なしで表示されるので一瞬「は?」となると思います。

僕はよく改行コードを忘れて忘れて「は?」ってなってます。

ちなみにintだと%d、charだと%cを使って変数の位置を指定するため、

ただのコンソール出力でもC言語はプログラミング初心者には非常に優しくないです。

 

 

では、C++で同じ処理をする場合はどうでしょうか。

 

C++でのHello World

f:id:faule:20190513013647p:plain

C

1行目は先ほどと同じでライブラリの指定です。

iostreamはinput output streamと覚えるといいと思います。

入出力に関するライブラリです。

 

2行目はnamespaceを指定しています。

namespaceはフォルダの構造をイメージしてもらえるとわかりやすいと思います。

今回ですとiostreamの中のstdに入っているcout(console outputの略です)を使いたいため、

本来だと6行目にはstd::cout()(「std::」はstdの中の、という意味です。iostreamは1行目で宣言されていますね)を使う必要があるのですが、

namespaceを宣言することでstdの部分を省略しています。

試しに2行目を消して6行目にstd::coutと書いてみるといいかもしれません。

 

C++では標準でstringが定義されているため、

CのようにtypedefでStringを宣言する必要はありません。

Cにおける文字列の扱いはものすごく難しいので、

僕としてはC++はCの改良として非常にありがたく思っている部分です。

(Stringはtypedefの定義通りchar配列(メモリへのアドレス情報)なので、

Cでは扱うのにポインタに関する深い理解と注意が必要です)

 

Hello WorldプログラムでCとC++で大きな違いが現れているのが6行目です。

C++では%dのような迂遠な書き方をせず、strだけで変数を理解してくれます。

非常にありがたいですね。

ちなみに普通の文字列と一緒に出力したいときは、

cout << "strの中身は" << str << "です" << endl;

と書くことで出力することができます。

endlは改行(end line)を意味しています。

 

 

さて、Hello Worldプログラムを使ってCとC++の違いを説明してみましたが、

どうだったでしょうか。

正直プログラミング初心者の方だとわからない単語も多かったかもしれませんが、

わからない単語はググって調べる、というのはプログラマの必須スキルなので、

わからない部分があった方はググってみて頂けると成長に繋がると思います。

 

ちなみにライブラリの部分についてはわからなくても問題ないです。

大体の技術書で最初は「おまじないです」の一言で済ませられている部分なので。

 

わからない部分があったらコメントで気軽に質問してください!

また、記事で間違っている部分があったらご指摘をいただけるとありがたいです!

 

今回は以上になります。

次回はプログラムに自分の任意の値を入れる方法について書きたいと思います。

 

では、また明日!

 

C++の概要

この記事は簡単なC++の概要になります。

 

C++はかの有名なC言語の拡張として登場した言語です。

具体的な拡張としては、オブジェクト指向の追加が大きな特徴になると思います。

 

オブジェクト指向とは、クラスごとに役割を持たせて

Aの処理はAクラス、Bの処理はBクラスで行うという

役割決めをして行うプログラミングです。

会社でいう部署みたいなものだと思うといいと思います。

(営業部(クラス)は営業を行う、開発部(クラス)は開発を行う、みたいな)

 

この指向の登場によって、

プログラミングの可読性、やりやすさは飛躍的に上がったと言えるでしょう。

C言語は構造体(struct)の言語ですので、

CとC++では同じ処理でもソースの読みやすさが段違いです。

(僕の母語Javaなのも大いに影響している気はしますが)

 

ちなみに、C++はCの拡張なので、

Cのみで書いたコードをC++の実行環境で動かすことも可能です。

 

プログラミング言語は大きく分けて2種類に分類されます。

機械語(1と0の集合体)に近い低級言語とその発展型である高級言語です。

代表的なものとしては低級言語でアセンブラ高級言語JavaC#があります。

CやC++はというと、その中間というか、低級言語でもあり高級言語でもあるような存在です。

高級言語ではポインタ(メモリのアドレス)などを意識してプログラミングをすることはありませんが、低級言語というには機械語とも少し離れているためです。

ちなみに、Javaの実行環境であるJVMC言語で書かれているそうです。

 

C++を扱うにはたくさんの知識が必要ですが、

扱うことができれば高級言語よりも自由度が非常に高い言語です。

(その分知識が足りなければコンピュータを破壊するリスクなどもありますが)

 

読者の皆さんも私と一緒にC++を勉強して、

この難解な言語を自由自在に操れるようになりませんか?

きっと楽しいと思います。

中の人の概要

初めまして!

 

これからC++の勉強をして、その記録をこのブログに書いていこうと思っています。

備忘録ってやつですね。

 

僕は普段、仕事でJavaプログラマをしているんですが、

高級言語ってなんだかよくわからないまま使えてしまうので、

具体的な部分というか、裏で何をやっているのかイマイチわからないんですよね。

(メモリの管理だとかそういうのをガベージコレクタがやってくれたり)

 

なので今回、低級言語について学びたいなっていうのと、

一人でやってると心が折れそうなので

ブログを作って進捗を人の目に付く形で書いていこうかなと思った次第です。

技術のアウトプット自体はずっと前からしたかったですしね。

 

さて、アセンブラやCじゃなくC++にした理由ですが、

僕はゲームが好きで、Unityで簡単なゲームを作ったりして一人で遊んで満足していたんですが、

最近Unreal Engineというゲームエンジンの存在を知りました。

そのスクリプト言語C++だったというのが大きな理由になります。

 

普段はJavaC#、あとは簡単なJavaScriptだとかHTMLだとか

そういうものを扱ってご飯を食べています。

よくいるスーツとエクセルと人月工数で働く雑多なプログラマです。

休日はプログラミングとゲーム、アニメ鑑賞でほぼ消化しています。

ブログの内容と関係ないので多分記事としては書きませんが、

正直ゲーム会社とかそういうところで働きたいなと思っていて、

最近ちょっと転職活動をしていたりします。

(ゲーム会社に転職できたらちょっと報告するかもしれません)

 

ブログ自体書くのが初めてなので文章が読みにくかったりするかもしれませんが、

「昨日より一歩前へ」を胸に刻んで少しずつ進んでいきたいと思っています。

 

記事の内容で理解が間違っている箇所等ありましたら教えていただけると嬉しいです。

あと、エンジニアやその他の方とお知り合いになれたら嬉しいなと思っているので、

コメント等頂けると中の人がとても喜びます。

 

中の人の紹介としては以上になります。

それと、開発していく上での環境だけ書いておきますね。

 

マシン:MacBook Pro 15インチ

OS:MacOS

使用ツール

 Xcode

 UnrealEngine4(これに関してはしばらく出てこないと思います)

 

これからよろしくお願いします。