Youtube登録者5000人突破!!

はじめてのC++プログラミング入門講座まとめ【Youtube動画付き】

はじめてのC++プログラミング入門講座では、プログラミングをやったことのない人でも分かるように、C++について解説します。まずは、C++を知るところからはじめて、初心者がつまづきやすい「ポインタ」までをゴールとして進めていきます。全て無料で学べる内容となってますので、ぜひ最後までお付き合いください。

動画のタイトルには丁寧に学ぶの文字がある通り、ひとつずつじっくりと理解していくことを目的としています。はじめは少し退屈かもしれませんが、基礎を身に着けておくと、後が楽になります。また、プログラミング学習でよくあるのが、飛ばしすぎて途中で挫折してしまうことです。続けさえすれば力になります。じっくりゆっくり学んでいきましょう。

1.Visual Studioによる環境構築

まずはC++というプログラミング言語の特徴について学んでいきましょう。C++は簡単に言うとC言語の進化版です。C言語を使いやすく追加機能をつけたものがC++なので、実はC言語もC++上で動作します。いわゆる下位互換性というやつです。プレステ3でプレステ2が遊べたのと同じです。

今回の入門講座では扱いませんが、オブジェクト指向であることも一つの特徴です。これによって、C言語と機能が変わらなくても書き方が大きく変わっていると感じるはずです。このあたりは理解に時間がかかるので、続きのC++初級講座で説明します。興味のある方はC++初級講座の第一回を見てみてください。オブジェクト指向の概念だけの説明をしています。

そして、C++から派生してできた言語がJavaC#です。なので、これらの言語と共通点が多く、今後別のプログラミング言語を学ぶ際にも、C++講座で学んだ知識は役に立つでしょう。

ちなみに、C#というのはC++に++を追加してC#という名前になっています。C言語から段階的に進化していることがわかって頂けると思います。ただ、既に作られたプログラムが多いのと自由度の高さから、C++のほうが使用されることが多いのが現状です。

C++というプログラミング言語について理解したら、プログラミングの練習ができる環境を作りましょう。これを環境構築と言います。基本的には、プログラミングを作ったり試したりするためには、IDE(統合開発環境)が必要になります。IDEがあることで、書いたコードが見やすくなったり、バグが見つかりやすくなったりと、プログラミングがしやすくなります。今回は無料のVisual Studioを使いますが、色々他のものも見てみると楽しいと思います。

(※本講座ではWindowsの環境構築のみ紹介します。Macなどでもプログラムはそのまま使えると思いますが、もし環境構築でうまく行かない場合は別途調べてみてください。)

まずはVisualStudioのインストールを行います。Googleで「VisualStudio」と検索するとすぐに出てくると思います。今回は無料であるコミュニティ版を使います。VisualStudio公式サイトのダウンロードという項目から、”コミュニティ”というものを選択してダウンロードしましょう。

重要なポイントは下記のとおりです。

  • C++はC言語の進化版
  • C++はC言語で書いたプログラムがそのまま使える
  • Visual StudioはIDEと呼ばれる統合開発環境である
  • Visual Studioはエディタとビルドの機能が備わっている

2.最初のコードをじっくり見てみよう

プログラミングを勉強するときに一番はじめにやるべきことは何でしょう?

それは、画面に文字を出すことです。画面に文字を出すことで、プログラム内で何が起こっているのかわかりやすくなるので、今後の勉強全てに役に立つからです。一般的に、「Hello World」と画面に出すのが一番はじめのステップとされています。簡単に思えるかもしれません。しかし実は、たったそれだけのプログラムでも、大事な要素がたくさん含まれているのです。

一般的には、講義の内容に関係のない部分や変更の少ない部分は「おまじない」といった表現がされます。「おまじない」とはつまり、「何かよくわからないけど、必要だから入れる。詳細は気にせず先に進める」ということです。

しかし、わからないことをわからないままにして進めてしまうと挫折しやすくなります。そこで、この講座では細かい部分まで全て説明します。まずは短いコードから理解していきましょう。

大事なポイントは下記のとおりです。

  • #include はライブラリを使えるようにする
  • <Iostream> は入出力に関する標準ライブラリ
  • int main(){ } はメイン関数
  • プログラムの実行とは、メイン関数内を実行することを意味する
  • 標準ライブラリのメソッドを使うときは頭にstd::をつける
  • プログラムの行の末尾にはセミコロン(;)をつける
  • 画面出力にはcoutを使う
  • ダブルクォーテーション(”)で囲むと文字列として認識される
  • 文字列内に特殊な文字列(\nなど)を入れることで特殊な文字を表せる
  • \n は改行を表す

3.変数・型・演算子

変数とは、簡単に言うと数学でいうxのことです。この変数を使って色々なことができるようになります。例えば、計算やたくさんの情報が入ったリスト、複雑なロジック等を作ることが出来ます。

プログラミングでは、変数に数字以外にも文字も入れられます。このときに、変数に数字や文字等のなんの情報を入れるかを指定するのが「」です。

そして、計算をするときに使うのが、「演算子」です。足す引くかける割るは四則演算と呼ばれますが、+ー×÷は演算子と呼ばれます。

大事なポイントは下記のとおりです。

  • 変数は数学のxやyのように好きなものを入れられる
  • 変数は整数・小数・文字列などが入れられる
  • 変数は使用用途に応じた型で宣言する必要がある
  • 小数はプログラミングでは、表示方法に基づいた名前として浮動小数点と呼ぶ
  • 演算もできる
  • かける(×)は「*」、割る(÷)は「/」で表す

4.代入演算子・インクリメント

特殊な演算子として、代入演算子とインクリメントがあります。この2つは、普通の演算子でできることを省略形で書く機能です。省略形というと、必須スキルではないような気もしますが、なぜ必要なのでしょうか?

プログラムは長くなると、どんどん複雑になります。「いかに見やすいプログラムを書くか」はプログラマーの一生の課題と言っても過言ではありません。それほどまでに、見やすいプログラムというのは価値があります。

省略形はすっきりとした見た目で、ひと目でプログラムを見やすくしてくれます。特に、一つずつ数字を増やす機能である「インクリメント」は多用されるので、しっかり頭に入れておきましょう。

大事なポイントは下記のとおりです。

  • 代入演算子を使うと、変数に追加で足したり引いたりするプログラムがシンプルになる
  • x += 3 はxに3を足すことを意味する(x=x+3 と同じ意味になる)
  • インクリメントを使うと、変数に1を足すプログラムがシンプルになる
  • x++ はxに1足すことを意味する(x=x+1 と同じ意味になる)

5.if文

if文を使えば、分岐を行うことが出来ます。例えば、ゲームの選択肢なんかはif文で作ることができます。「はい」と言ったら進む、「いいえ」といったら戻る、といったことが出来ます。

これからたくさんの機能を紹介していきますが、一番使うのはif文です。他の機能も共通する考え方は多いので、今回の講座で基本的な考え方を身につけましょう。

大事なポイントは下記のとおりです。

  • bool型はTrueかFlaseのどちらかを返す
  • if文を使うことで条件に応じた分岐を行える
  • if文の条件にはbool型を使う
  • else文はif文が実行されなかった場合だけ実行される
  • else if文はif文が実行されなかった場合だけ判定を行う
  • 比較演算子は左右の値の大小に応じてTrueかFlaseを返す
  • AND条件は「&&」、OR条件は「||」を使用する

6.名前空間(スコープ)・入力

ここでは、名前空間と入力という2つの機能を紹介します。

名前空間とは簡単に言うと、「変数を使える範囲」のことです。例えば、今まではmain関数内でプログラムを書いていますが、ここで宣言した変数は、通常はmain関数の外ではその変数は使えません。

ここで重要なのは「main関数で宣言した変数は、main関数外でその変数は使えない」ということです。逆に言えば、main関数外であれば同じ名前の別の変数を使うことが出来ます。

これは、次のシリーズの「C++初級講座」で紹介する「オブジェクト指向」とすごく相性が良いです。これはつまり、main関数より外であれば、main関数内の変数を気にせず、好きなようにプログラムを書くことができるということなので、大人数でプログラミングをするときに非常に便利です。今はまだルールとして知っておくだけで大丈夫です。勉強を進めるうちに、その重要性に気づくでしょう。

大事なポイントは下記のとおりです。

  • 名前空間(スコープ)を使えば、限定的な範囲で変数や関数を使うことができる
  • 波カッコで囲んだ範囲が名前空間となる
  • using namespace は、名前空間の表記を省略する機能である
  • using namespace std を使えば、標準ライブラリ内のメソッドもstd::表記を省略して使える
  • 変数宣言は可能な範囲で名前空間を狭くとる(if文、for文内に書くなど)
  • iostreamライブラリのcinを使えば、実行時に入力を与えられる

7.for文・配列

if文の次は、for文について学びましょう。for文は「繰り返し」を行う機能です。プログラマの口癖が「効率化」であるように、プログラマは繰り返し作業を嫌います。for文は、繰り返し作業をまとめてくれて、同じプログラムを書く手間を減らしてくれる機能です。

今回は、配列を使ってfor文の説明をします。配列とは、いくつかの変数をひとまとめで管理できる型です。一列の本棚のようなイメージで、一つの棚に一つの変数が入ると考えてください。

for文自体は書き方さえ覚えてしまえば、かなり簡単です。一方で、配列はつまずくポイントになりやすいです。このあたりは飛ばすと後々困るので、じっくり進めていきましょう。

大事なポイントは下記のとおりです。

  • for文は有限回の繰り返しを行える
  • for文を使うことで、繰り返しを圧縮できてスマートなプログラムが書ける
  • for文はこのように書ける→ for (初期値; 実行範囲; 実行毎に行う処理) {実行部分}
  • 配列は同じ型の要素をまとめて管理する
  • 配列は宣言時に要素数を指定し、各要素に値を代入する(宣言と代入をまとめて行うこともできる)
  • 配列の番号付けは0番目から始まり、(要素数-1)番目で終わる
  • continue はfor文のループ一回分を飛ばす
  • break はfor文を強制的に終了させる

8.関数

関数の基本的な考え方は数学と同じで、変数を与えてやると、計算されて、値を返す、です。

数学の関数との違いとしては、プログラミングでは関数に計算以外の色々な処理を行わせることができるというところです。例えば、画面に文字を出力したりとか、入力待ちをしたりとかです。

また関数を使うことで、メイン関数がスッキリします。スッキリしたメイン関数であれば流れも理解でき、長いプログラムでもわかりやすいものができます。ひとまとめにできる機能は関数にまとめるクセを付けておきましょう。

このように、関数のメリットは多数あり、プログラミングでは核となる機能です。

誰かが作ったプログラムを使用するときも、基本的に関数の形になっています。例えば、半径を入力してやれば円の面積を求める関数、みたいな感じです。つまり、関数の使い方を覚えるということは、プログラムを全て自分で書く必要がなくなるということです。(いわゆる「車輪の再発明を避ける」というやつです)

関数において大事なのは、「引数(関数に与える値)」「返り値(関数から帰ってくる値)」の2つです。この2つの単語は今後も出てくるので、覚えておきましょう。また、関数は今後出てくる「クラス」の基本要素です。今後、躓かないためにも、基本を固めておきましょう。

大事なポイントは下記のとおりです。

  • 関数にすることで自作の機能をまとめられる
  • 関数は、引数を与えたら、処理をして、返り値を返す機能である
  • どれかの機能が抜けていても関数は作ることができる
  • 関数の形は「返り値の型 関数名(引数) { 処理 }」で書ける
  • もし返り値の型がない場合はvoidを書き、引数がない場合は何も書かなくて良い
  • プロトタイプ宣言は、関数の宣言と関数の定義を分けて書く
  • プロトタイプ宣言を使えば、メイン関数より後に自作関数の定義を書ける
  • プログラムを見やすくするために、プロトタイプ宣言を使うのが一般的である

9.オーバーロード・テンプレート

前回は関数について学びましたが、今回はその機能の紹介です。関数の能力はこんなものではありません。まだまだ便利になります。

関数は、引数を与えて、処理をして、返り値を返す、という機能でした。しかしここで不便なのが、引数も返り値も型を指定する必要があるということです。

int型で作った関数にdouble型の引数は渡せないし、引数の個数が変わると、別の関数を作らないといけません。この困りごとを解決するのが、今回紹介する「オーバーロード」「テンプレート」です。

オーバーロードは、関数の引数の型や数によって、別の関数を実行させられる機能です。一方で、テンプレートは、型によらず、同じ処理をする関数を作ることが出来ます。簡単に言うと、どちらも柔軟に対応できる関数ができるということです。

どんな型でも対応できるプログラムをオーバーロードで書こうとすると、非常に長いプログラムになってしまいます。そんなときに使えるのがテンプレートです。

一方でテンプレートは、「」に特化しています。例えば、今まで使用していた演算子の + – * / は、int型もdouble型も計算できました。これは、テンプレートで、何の型が来ても計算できるようにしているからです。

大事なポイントは下記のとおりです。

  • オーバーロードは異なる型、引数の数に対応できる関数を作成できる
  • 同じ関数名を使えば、オーバーロードできる
  • 異なる型に対応できる関数を作りたいならテンプレートを使う
  • テンプレートの書き方は難しそうに見えるが、基本的にコピペでOK
  • オーバーロードとテンプレートを加えても関数呼び出しのやり方は変わらない

10.ポインタ

全ての変数は、メモリに記憶されるときに「アドレス」を持ちます。このアドレスを指すのが、「参照」と呼ばれる方法です。そして、そのアドレスが持っている変数を指し示すのが、ポインタです。

例えば、変数だけで使用していると、関数を呼び出すときは引数としてコピーが作成されます。しかし、参照渡しをすると、元の変数を変更できるので、コピーを作る必要がなくなります。

大した差ではないように思うかもしれませんが、これが結構重要です。大きなデータだとこれだけでメモリオーバーになりエラーとなったりします。このように、メモリを最小限に抑える等のメリットがあると理解しておくと、理解が進むでしょう。

難しければ、ポインタは飛ばして、参照渡しだけでも理解しておくと今後の負担が小さくなります。

11.総集編

お疲れさまでした。ここでは、今まで学んだ内容を爆速で振り返ります。まずは、ここまでがんばった達成感を味わいましょう。そして、わからなかったところを振り返って、不安を取り除いてから、次の章に進んでいきましょう。

おわりに

ここまでで入門編は終わりです。基本的なプログラミングの知識は身についているはずです。ここからは、C++等の最近の言語で重要視されている「オブジェクト指向」について学んでいきます。少し難しくなっていきますが、ここまでこれたなら大丈夫です。ゆっくりじっくりと丁寧に学んでいきましょう。

youtubeではITの基礎知識についても紹介しています。「文系だからあまり機械についてよく知らない・・」という方でもわかるように基礎から紹介していますので、良かったらそちらもどうぞ。