|
| 1 | +# 第1章: C++の世界へようこそ |
| 2 | + |
| 3 | +C++プログラミングの全体像を掴む章へようこそ! 🎉 この章では、あなたがこれまでに培ってきたプログラミングの知識を土台に、C++ならではの特徴や文化に触れていきます。他の言語との違いを意識しながら、まずは「**ソースコードを書き、コンパイルして実行する**」というC++の基本的な開発フローを体験しましょう。 |
| 4 | + |
| 5 | +## C++とは? |
| 6 | + |
| 7 | +C++は、C言語を拡張して作られた、非常にパワフルで汎用性の高いプログラミング言語です。その歴史は古く、1983年にBjarne Stroustrupによって開発が始まりました。 |
| 8 | + |
| 9 | +### 特徴 |
| 10 | + |
| 11 | +他の言語と比較したC++の特徴は以下の通りです。 |
| 12 | + |
| 13 | + * **パフォーマンス 🚀:** C++は、OSやハードウェアに近い低レベルな操作が可能で、実行速度が非常に高速です。このため、パフォーマンスが最重要視される場面で絶大な信頼を得ています。 |
| 14 | + * **静的型付け:** 変数の型はコンパイル時に決定されます。これにより、実行前に多くのエラーを発見でき、大規模な開発でもコードの安全性を保ちやすくなります。 |
| 15 | + * **マルチパラダイム:** 手続き型プログラミング、オブジェクト指向プログラミング、ジェネリックプログラミングなど、様々なプログラミングスタイルをサポートしています。これにより、問題の性質に合わせて最適なアプローチを選択できます。 |
| 16 | + * **C言語との互換性:** C言語のコードの多くは、ほとんどそのままC++のコードとしてコンパイルできます。C言語で書かれた膨大なソフトウェア資産を活用できるのは大きな利点です。 |
| 17 | + |
| 18 | +### C++が使われる分野 |
| 19 | + |
| 20 | +その高いパフォーマンスと柔軟性から、C++は以下のような幅広い分野の第一線で活躍しています。 |
| 21 | + |
| 22 | + * **ゲーム開発:** Unreal EngineやUnity(一部)など、多くの有名ゲームエンジンがC++で開発されています。キャラクターの物理演算やリアルタイムグラフィックス描画など、速度が求められる処理に不可欠です。 |
| 23 | + * **OS開発:** Windows, macOS, Linuxといった主要なオペレーティングシステムのカーネルやシステムコンポーネントの多くがC++で記述されています。 |
| 24 | + * **金融システム:** 1ミリ秒を争う高頻度取引(HFT)システムなど、超低遅延が求められる金融アプリケーションで使用されています。 |
| 25 | + * **組み込みシステム・IoT:** 自動車のエンジン制御ユニット(ECU)や家電、産業用ロボットなど、リソースが限られた環境でも高速に動作する必要があります。 |
| 26 | + |
| 27 | +## 開発環境のセットアップ |
| 28 | + |
| 29 | +C++プログラムを実行するには、**コンパイラ**が必要です。コンパイラは、人間が書いたC++のソースコードを、コンピュータが理解できる機械語に翻訳するツールです。 |
| 30 | + |
| 31 | +このウェブサイト上ではブラウザ上でコードを編集し実行できる環境を提供しており、特別なセットアップは不要です。しかし、ローカル環境でC++を学びたい場合は、以下のようなコンパイラとIDE(統合開発環境)をインストールすることをお勧めします。 |
| 32 | + |
| 33 | +### コンパイラとIDE |
| 34 | + |
| 35 | +* **コンパイラ:** |
| 36 | + * **GCC (GNU Compiler Collection):** Linuxで標準的に使われるコンパイラ。Windows (MinGW/MSYS2) やmacOSでも利用可能です。 |
| 37 | + * **Clang:** AppleのXcodeで標準的に使われているコンパイラ。エラーメッセージが分かりやすいと評判です。 |
| 38 | + * **MSVC (Microsoft Visual C++):** MicrosoftのVisual Studioに付属するコンパイラ。Windows開発の標準です。 |
| 39 | +* **IDE (統合開発環境) / エディタ:** |
| 40 | + * **Visual Studio (Windows):** コンパイラ、エディタ、デバッガなど、C++開発に必要な全てが詰まった強力なIDEです。初心者には特におすすめです。 |
| 41 | + * **Visual Studio Code (Windows/macOS/Linux):** 軽量なエディタですが、拡張機能を入れることで強力なC++開発環境を構築できます。 |
| 42 | + |
| 43 | +### おすすめのセットアップ |
| 44 | + |
| 45 | + * **Windows:** **Visual Studio Community** をインストールするのが最も簡単です。インストーラーで「C++によるデスクトップ開発」ワークロードを選択すれば、必要なものがすべて揃います。 |
| 46 | + * **macOS:** ターミナルで `xcode-select --install` を実行し、**Xcode Command Line Tools** をインストールします。これにはClangコンパイラが含まれます。エディタは **Visual Studio Code** がおすすめです。 |
| 47 | + * **Linux (Ubuntu/Debian系):** ターミナルで `sudo apt update && sudo apt install build-essential g++` を実行してGCCコンパイラをインストールします。エディタは **Visual Studio Code** がおすすめです。 |
| 48 | + |
| 49 | + |
| 50 | +## 最初のプログラム |
| 51 | + |
| 52 | +環境が整ったら、さっそく定番の "Hello, World\!" プログラムを作成し、C++開発の流れを掴みましょう。 |
| 53 | + |
| 54 | +`main.cpp` という名前でファイルを作成し、以下のコードを記述してください。 |
| 55 | + |
| 56 | +```cpp:main.cpp |
| 57 | +// 画面に "Hello, World!" と表示するプログラム |
| 58 | + |
| 59 | +#include <iostream> |
| 60 | + |
| 61 | +int main() { |
| 62 | + std::cout << "Hello, World!" << std::endl; |
| 63 | + return 0; |
| 64 | +} |
| 65 | +``` |
| 66 | + |
| 67 | +### コンパイルと実行 |
| 68 | + |
| 69 | +このコードを実行するには、まず**コンパイル**して実行可能ファイルを生成する必要があります。ターミナル(Windowsの場合はコマンドプロンプトやPowerShell)で以下のコマンドを実行します。 |
| 70 | + |
| 71 | +```bash |
| 72 | +# g++ (GCC) または clang++ (Clang) を使ってコンパイル |
| 73 | +# -o main は出力ファイル名を main にするという意味 |
| 74 | +g++ main.cpp -o main |
| 75 | + |
| 76 | +# 生成された実行可能ファイルを実行 |
| 77 | +./main |
| 78 | +``` |
| 79 | + |
| 80 | +このウェブサイト上の実行環境で動かす場合は、以下の実行ボタンをクリックしてください。 |
| 81 | +実行すると、ターミナルに以下のように表示されるはずです。 |
| 82 | + |
| 83 | +```cpp-exec:main.cpp |
| 84 | +Hello, World! |
| 85 | +``` |
| 86 | + |
| 87 | +PythonやJavaScriptのようなインタプリタ言語とは異なり、C++では「コンパイル」という一手間が必要です。このステップにより、実行前にコード全体がチェックされ、高速なネイティブコードが生成されます。 |
| 88 | + |
| 89 | +## C++の基本構造 |
| 90 | + |
| 91 | +先ほどの "Hello, World\!" プログラムには、C++の基本的な要素が詰まっています。一つずつ見ていきましょう。 |
| 92 | + |
| 93 | +### `#include <iostream>` - ヘッダファイルのインクルード |
| 94 | + |
| 95 | +`#include` は、他のファイルに書かれた機能を利用するための**プリプロセッサ命令**です。ここでは、コンソールへの入出力機能を提供する `iostream` という標準ライブラリのヘッダファイルを読み込んでいます。これにより、`std::cout` などが使えるようになります。 |
| 96 | + |
| 97 | + * `< >` で囲む: 標準ライブラリのヘッダファイルをインクルードする場合 |
| 98 | + * `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 (後の章で学びます) |
| 99 | + |
| 100 | +### `int main()` - main関数 |
| 101 | + |
| 102 | +`main`関数は、C++プログラムのエントリーポイント(**実行開始点**)です。OSはプログラムを実行するとき、まずこの`main`関数を呼び出します。 |
| 103 | + |
| 104 | + * `int`: `main`関数が整数 (integer) の値を返すことを示します。この戻り値はプログラムの終了ステータスとしてOSに渡され、`0` は**正常終了**を意味するのが慣例です。 |
| 105 | + * `()`: 関数が引数を取らないことを示しています。(引数を取ることも可能です) |
| 106 | + |
| 107 | +### `std::cout` と `std::endl` - 名前空間 (namespace) |
| 108 | + |
| 109 | + * `std::cout`: "character output stream" の略で、コンソールへの標準出力を担当します。 |
| 110 | + * `<<`: **ストリーム挿入演算子**と呼ばれ、右側のデータを左側のストリーム(ここでは `std::cout`)に流し込むイメージです。 |
| 111 | + * `std::endl`: "end line" の略で、改行を出力し、出力バッファをフラッシュ(強制的に出力)します。 |
| 112 | + * `std::`: `cout` や `endl` が `std` という**名前空間 (namespace)** に属していることを示します。名前空間は、大規模なプログラムで関数や変数の名前が衝突するのを防ぐための仕組みです。`std` はC++の標準ライブラリが定義されている名前空間です。 |
| 113 | + |
| 114 | +## この章のまとめ |
| 115 | + |
| 116 | + * C++は、**パフォーマンス**と**多機能性**を両立した強力なプログラミング言語です。 |
| 117 | + * C++の開発フローは、「**ソースコード作成 → コンパイル → 実行**」が基本です。 |
| 118 | + * すべてのC++プログラムは `main` 関数から実行が始まります。 |
| 119 | + * `#include` で外部ライブラリの機能を読み込み、`namespace` で名前の衝突を避けます。 |
| 120 | + |
| 121 | +これであなたもC++プログラマの仲間入りです!次の章では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。 |
0 commit comments