C++入門|C++を学ぶ前の基礎知識

C++を学ぶ前に、まずはコンピュータの言葉を知ろう。0と1の世界を、戦士の修行のように一歩ずつ理解すれば、C++の入口はぐっと近くなります。

C++を学び始める前に、まず知っておきたいことがあります。

それは、コンピュータは人間の言葉をそのまま理解しているわけではない、ということです。

私たちは日本語や英語のような自然な言葉で考えます。しかし、コンピュータが直接理解できるのは、もっと機械に近い形の命令です。

ドラゴンボール風にたとえるなら、人間の言葉は修行仲間同士の会話です。一方、コンピュータが理解できる言葉は、戦闘装置やスカウターに直接命令を送るための特殊な信号のようなものです。

戦士が重力室を動かしたいとき、「いい感じに重力を上げて」と言っても装置は動きません。装置が理解できる決まった命令に変換してあげる必要があります。

プログラミング言語は、そのために使うものです。

人間が理解しやすい形で命令を書き、それをコンピュータが理解できる形へ変換することで、画面に文字を表示したり、計算したり、ゲームを動かしたり、機械を制御したりできます。

用語ドラゴンボール風のたとえ意味
人間の言葉戦士同士の会話人が自然に理解できる言葉
プログラミング言語修行装置に伝えるための命令書コンピュータへ処理を伝えるための言葉
コンピュータ修行装置やスカウター命令どおりに処理を行う機械
実行命令を受けて装置が動くことプログラムが動作すること

C++を学ぶということは、ただ文法を覚えることではありません。

コンピュータに命令が伝わる流れを理解し、人間が書いた内容がどのように機械に届くのかを知ることでもあります。

最初にこの全体像をつかんでおくと、C++の学習がかなり楽になります。

図:人間の命令がコンピュータに届くまで

この図が示していること

この図では、人間が考えた命令が、プログラミング言語を通してコンピュータに伝わる流れを表しています。

戦士が修行装置を動かすには、装置が理解できる形で命令を出す必要があります。

同じように、私たちがコンピュータを動かすには、コンピュータに伝わる形で命令を書く必要があります。その役割を果たすのがプログラミング言語です。

プログラミング言語とは何か

プログラミング言語とは、コンピュータに命令を伝えるための言葉です。

コンピュータは、自分で考えて勝手に動くわけではありません。何をしてほしいのかを、細かく順番に伝える必要があります。

たとえば、画面に文字を出す、数値を計算する、データを保存する、条件によって処理を変える、何度も同じ処理を繰り返す、といった動作は、すべてプログラムによって指示されます。

ドラゴンボール風に言えば、プログラムは修行メニューのようなものです。

修行メニュープログラムでの意味
まず準備運動をする最初の処理を行う
戦闘力を測るデータを確認する
戦闘力が低ければ基礎修行をする条件によって処理を変える
100回パンチを繰り返す同じ処理を繰り返す
結果を記録するデータを保存する

このように、プログラムはコンピュータに対する手順書です。

C++は、その手順書を書くためのプログラミング言語の1つです。

ただし、C++は単に命令を順番に書くだけの言語ではありません。C言語から受け継いだ細かな制御の力を持ちつつ、さらに大きなプログラムを整理して作るための考え方も持っています。

そのため、C++を学ぶ前には、まずプログラミング言語とは何か、コンピュータがどのように命令を受け取るのかを知っておくことが大切です。

マシン語と高級言語

コンピュータが直接理解できる言葉は、マシン語と呼ばれます。

マシン語は、0と1を中心にした機械向けの命令です。人間から見ると、とても読みづらく、意味を理解するのが大変です。

ドラゴンボール風に言えば、マシン語は修行装置の内部信号のようなものです。

戦士が見ても、0と1の信号が大量に並んでいるだけでは、何を意味しているのかすぐには分かりません。しかし、装置にとってはそれが直接理解できる言葉です。

一方で、人間が読み書きしやすいように作られたプログラミング言語を高級言語といいます。

C言語やC++は、この高級言語に分類されます。

高級言語と聞くと、難しい上級者向けの言語のように感じるかもしれません。しかし、ここでいう高級とは、人間に近い表現で書けるという意味です。

種類ドラゴンボール風のたとえ特徴
マシン語修行装置の内部信号コンピュータが直接理解できるが、人間には読みにくい
高級言語戦士が読める命令書人間が理解しやすい形で書ける
C/C++実戦向けの命令書人間が書きやすく、機械にも近い処理ができる

マシン語は、CPUの種類によって異なります。

CPUとは、コンピュータの頭脳にあたる部品です。パソコンでよく使われるインテル系のCPUと、スマートフォンなどでよく使われるARM系のCPUでは、理解できるマシン語の系統が異なります。

ドラゴンボール風にたとえると、流派ごとに合図や技の出し方が違うようなものです。

亀仙流の合図で動く修行装置に、惑星戦士流の合図を送っても、そのままではうまく動きません。

同じように、あるCPU向けに作られたマシン語のプログラムは、別のCPUではそのまま動かないことがあります。

さらに、OSの違いも重要です。

OSとは、WindowsやLinuxのように、コンピュータ全体を管理する基本ソフトです。同じCPUを使っていても、OSが違えば、プログラムの動かし方や使える仕組みが変わります。

これは、同じ修行場でも、管理者やルールが違えば、装置の使い方が変わるようなものです。

違いたとえプログラムへの影響
CPUが違う流派が違う理解できるマシン語が変わる
OSが違う修行場の管理ルールが違う同じ命令でも動かし方が変わる
実行環境が違う装置の仕様が違うそのまま動かない場合がある

このように、コンピュータの世界では、どのCPUで動かすのか、どのOSで動かすのかがとても大切です。

C++は高級言語ですが、コンピュータに近い部分も意識できる言語です。そのため、CPUやOSの違いを知っておくと、C++の特徴がより理解しやすくなります。

コンパイラとインタープリタ

高級言語で書いた内容は、そのままではコンピュータが直接理解できません。

そこで、人間が書いた命令を、コンピュータが理解できる形に変換する必要があります。

この変換方法には、大きく分けてコンパイラ方式とインタープリタ方式があります。

ドラゴンボール風にたとえるなら、どちらも戦士の命令を修行装置に伝えるための通訳です。ただし、通訳のやり方が違います。

コンパイラは、命令書全体を最初にまとめて翻訳します。

すべての修行メニューを事前に装置用の命令へ変換してから、実際に修行を始めるイメージです。

一方、インタープリタは、命令を読みながら、その場で少しずつ翻訳して実行します。

修行メニューを1つ読むたびに、その場で装置に伝えて動かすイメージです。

方式ドラゴンボール風のたとえ特徴
コンパイラ修行メニューを全部翻訳してから開始実行前にまとめて変換する
インタープリタ修行メニューを読みながらその場で通訳実行しながら順番に変換する

C/C++では、基本的にコンパイラを使います。

つまり、C++で書いた内容は、まずコンパイラによってマシン語に変換されます。そして、変換後に作られた実行ファイルを動かします。

これは、戦士が修行を始める前に、すべてのメニューを修行装置用の命令に変換しておき、準備が整ってから一気に動かすようなものです。

図:コンパイラとインタープリタの違い

この図が示していること

この図では、コンパイラ方式とインタープリタ方式の違いを表しています。

コンパイラ方式は、プログラム全体を先に機械語へ変換してから実行します。C/C++はこの方式を使う代表的な言語です。

インタープリタ方式は、プログラムを読みながら少しずつ変換して実行します。

どちらも人間が書いた命令をコンピュータに伝えるための仕組みですが、翻訳するタイミングが違います。

C++を学ぶときは、書いた内容がすぐにそのまま動くのではなく、コンパイルという準備を通ってから実行される、という流れを覚えておくと理解しやすくなります。

C++とはどのような言語か

C++は、C言語を拡張して作られたプログラミング言語です。

C言語は1972年に開発され、その後、多くの分野で使われるようになりました。処理が速く、コンピュータに近い部分を扱えるため、OSや組込み機器、システム開発など、さまざまな現場で重宝されました。

ドラゴンボール風に言えば、C言語はあらゆる戦士が学ぶ基本武術として広がっていった流派です。

しかし、時代が進むにつれて、開発するプログラムはどんどん大きくなりました。

昔は少人数で作れたものも、やがて多くのプログラマーが参加する大規模な開発へと変わっていきました。

そうなると、単に命令を順番に書くだけでは、全体を管理するのが難しくなります。

戦士が1人で修行しているうちは、技や道具を自分だけで管理できます。しかし、大勢の戦士が参加する大きな作戦では、誰がどの役割を持ち、どの技を使い、どの装備を管理するのかを整理しなければなりません。

そこで、C言語にオブジェクト指向の考え方を取り入れたC with Classesが生まれました。

このC with Classesは、AT&Tベル研究所のビャーネ・ストラウストラップによって作られました。その後、改良が重ねられ、1983年にC++という名前になりました。

C++という名前は、C言語の++という演算子に由来します。

++は、値を1つ増やすという意味を持ちます。つまりC++という名前には、C言語を一段階進化させた言語というニュアンスがあります。

ドラゴンボール風に言えば、C++はC言語が修行を重ねて、1段階パワーアップした姿です。

時期出来事ドラゴンボール風のイメージ
1972年C言語が開発される基本武術の流派が誕生する
その後C言語が多くの分野で使われる多くの戦士が基本武術を学ぶ
大規模開発の時代C言語だけでは整理が難しくなる大人数の作戦で管理が複雑になる
C with ClassesCにクラスの考え方が加わる戦士の設計図を使う考え方が生まれる
1983年C++という名前になるC言語が進化した上級流派になる

C++は、C言語の力を受け継ぎながら、より大きな開発にも対応しやすいように進化しました。

その中心にある考え方の1つが、オブジェクト指向です。

オブジェクト指向では、プログラムに登場するものを、情報と行動を持ったまとまりとして考えます。

ドラゴンボール風に言えば、戦士には名前、戦闘力、流派、得意技があります。そして、攻撃する、修行する、気を高めるといった行動があります。

このような戦士の設計図をクラスと考え、そこから実際に登場する戦士を作るイメージです。

C++は、こうした設計の考え方を使えるため、大きなプログラムを整理しやすくなります。

C++の長所

C++には、いくつかの大きな長所があります。

まず、C言語との互換性が高いことです。

C++はC言語をもとに発展した言語なので、C言語で書かれた考え方や資産を活かしやすい特徴があります。

ドラゴンボール風に言えば、古くから伝わる基本武術を捨てるのではなく、その型を受け継ぎながら新しい技を追加できるということです。

次に、処理速度が速く、省メモリなプログラムを作りやすいことです。

C++は、コンピュータに近い部分まで意識して書けるため、無駄を減らした効率のよい処理を作りやすいです。

これは、戦士が自分の気の消費量を細かく管理しながら、必要な場面で一気に力を出すようなものです。

また、C言語よりも安全に書きやすい仕組みもあります。

たとえば、データと処理を整理して扱う考え方を使えば、プログラム全体の見通しがよくなります。大切な情報をむやみに触らせないように設計することもできます。

C++の長所ドラゴンボール風のたとえ内容
C言語との互換性基本武術を受け継げるC言語の知識や資産を活かしやすい
高速な処理素早い戦闘判断性能を求める場面で強い
省メモリ気の消費を抑える限られた資源を効率よく使いやすい
設計しやすい戦士や技を整理できる大きなプログラムを管理しやすい
安全に書きやすい面がある大切な力を勝手に触らせないデータの扱いを整理しやすい

C++は、性能が必要な場面で特に力を発揮します。

ゲーム、組込み機器、自動車制御、ロボット、シミュレーション、システム基盤など、速さや安定性が求められる場所で使われることが多いです。

ドラゴンボール風に言えば、C++は派手な必殺技だけでなく、重力室や宇宙船やスカウターの裏側を支える実戦的な技術です。

C++の短所

C++には強力な長所がある一方で、短所もあります。

まず、言語仕様が複雑です。

C++はC言語から受け継いだ仕組みを持ちつつ、さらにクラスやオブジェクト指向などの考え方も加えています。そのため、学ぶ内容が多く、最初はどこから手を付ければよいのか分かりにくく感じることがあります。

ドラゴンボール風に言えば、C++は基本武術、気の制御、武器の扱い、チーム戦術、設計の考え方まで学ぶ総合修行です。

次に、標準で利用できる機能だけでは、ほかの言語ほど手軽に済まない場面もあります。

JavaやC#のような言語では、標準機能や周辺環境が豊富に整っていることがあります。一方、C++では目的に応じてライブラリを選び、組み合わせて使う場面が多くなります。

ライブラリとは、よく使う処理を再利用しやすい形でまとめた部品集のようなものです。

ドラゴンボール風に言えば、ライブラリは修行道具セットです。道具がそろっていれば、修行の準備が楽になります。逆に、自分で道具を選んだり、必要に応じて組み合わせたりする必要があると、最初は少し大変です。

さらに、C++ではメモリの扱いにも注意が必要です。

C++は自由度が高いぶん、プログラマーが意識して管理しなければならない場面があります。これは、強力な気を扱えるかわりに、気の使いすぎや暴走に注意しなければならないようなものです。

C++の短所ドラゴンボール風のたとえ内容
言語仕様が複雑覚える流派や技が多い学習範囲が広い
ライブラリ選びが必要修行道具を自分で選ぶ目的に合う部品を探す必要がある
メモリ管理に注意が必要気の消費を自分で管理する扱いを間違えると不具合につながる
初心者には入口が重い最初の修行メニューが多い学習順序を意識する必要がある

ただし、これらの短所は、C++が弱い言語だという意味ではありません。

むしろ、C++が細かい部分まで扱える強力な言語だからこそ、注意して学ぶ必要があるということです。

強い技ほど、正しい使い方を覚える必要があります。C++も同じです。

C++を学ぶ前に押さえておきたい流れ

C++を学ぶ前には、いきなり細かい文法に入るより、全体の流れを知っておくと安心です。

まず、人間が書くプログラムは、そのままではコンピュータに伝わらないことを理解します。

次に、コンピュータが直接理解できるマシン語と、人間が読み書きしやすい高級言語の違いを知ります。

そして、C++ではコンパイラを使って、書いた内容を実行ファイルへ変換してから動かすことを理解します。

最後に、C++がC言語をもとに進化し、オブジェクト指向の考え方を取り入れた言語であることを押さえます。

学ぶ順番内容ドラゴンボール風のイメージ
1プログラミング言語とは何か修行装置への命令書を知る
2マシン語と高級言語装置の内部信号と人間向け命令書を区別する
3コンパイラとインタープリタ命令をどう翻訳するかを知る
4C++の成り立ちC言語から進化した流派を知る
5C++の長所と短所強みと注意点を理解する

この順番で学ぶと、C++の文法に入ったときに、なぜそのような仕組みが必要なのかが分かりやすくなります。

たとえば、コンパイルという言葉が出てきても、修行メニューを装置用の命令に変換する作業だと考えれば、イメージしやすくなります。

また、C++が難しいと言われる理由も、単に文法が複雑だからではなく、コンピュータに近い部分まで扱える自由度の高さにあると分かります。

図:C++を学ぶ前の基礎知識ロードマップ

この図が示していること

この図では、C++を学ぶ前に押さえておきたい基礎知識の流れを表しています。

いきなりC++の文法に入るのではなく、まずプログラミング言語とは何か、コンピュータが理解できるマシン語とは何か、高級言語をどうやって機械向けに変換するのかを知ることが大切です。

そのうえで、C++がC言語からどのように進化したのか、どんな長所と短所を持つのかを理解すると、C++学習の入口に立ちやすくなります。

C++学習は基礎修行から始めれば大丈夫

C++は、最初からすべてを理解しようとすると難しく感じます。

マシン語、高級言語、コンパイラ、CPU、OS、メモリ、オブジェクト指向など、聞き慣れない言葉がたくさん出てくるからです。

しかし、ひとつひとつは順番に理解できます。

ドラゴンボール風に言えば、いきなり強大な敵と戦う必要はありません。まずは重力に慣れ、基本の構えを覚え、少しずつ気の扱いを身につけていけばよいのです。

C++を学ぶ前の基礎知識は、これから始まる修行の準備運動です。

コンピュータがどのように命令を受け取り、どのようにプログラムを動かしているのかを知ることで、C++の文法や仕組みが理解しやすくなります。

C++は、C言語の力を受け継ぎながら、オブジェクト指向という設計の力を加えた実戦的な言語です。

最初は少し難しそうに見えても大丈夫です。

まずは、コンピュータの言葉を知り、翻訳の仕組みを知り、C++がどのように生まれたのかを知るところから始めましょう。

そこまで理解できれば、C++の学習はただの暗記ではなく、戦士が少しずつ成長していくような楽しい修行になっていきます。