
C++チートシート:初心者から中級者まで役立つ基本構文と主要機能
この記事は、C++プログラミングの概念を学び、復習したい初心者から中級者向けに、理解しやすい集約された情報源を提供することを目的としています。ページを何度も切り替えたり、理解しにくいさまざまなウェブサイトを参照したりする手間を省き、C++の基礎を効率的に習得できるよう設計されています。
C++は、1983年にBjarne Stroustrupによって開発された高水準プログラミング言語であり、多岐にわたるアプリケーション開発に利用されています。
はじめてのC++プログラムを作成しよう
C++
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!";
return 0;
}
出力
Hello World!
コードの意味が分からなくても問題ありません。C++コードの基本的な構造について解説します。
C++コードの基本構文
C++
// ヘッダーファイルをインクルード
#include <iostream>
// std名前空間には、さまざまな標準ライブラリのコンポーネントが含まれています
using namespace std;
// main関数はプログラムの実行開始点
int main() {
// ここにコードを記述します
return 0;
}
C++におけるコメント
コメントは、コードの説明を提供し、他の人がコードの機能を理解しやすくするために使用されます。
コメント以降のステートメントはコンパイラによって実行されません。したがって、コメントは、ステートメントを削除せずに、特定のステートメントの実行を一時的に無効にする(コメントアウトする)ためにも使用できます。
コメントの種類:
1. 単一行コメント
2つのスラッシュ // を使用して、単一行コメントを示します。例えば、
// これはコメントです
cout << “GeeksforGeeks”;
2. 複数行コメント
/* を使用して複数行コメントを開始し、*/ を使用して終了します。例えば、
/\ これは複数行のコメントです。*
以下のステートメントはGeeksforGeeksを出力します。*/
cout << “GeeksforGeeks”;
C++の変数
変数は、特定のデータ型の値を保持できる名前付きストレージの場所です。
- 変数は任意のデータ型にすることができます。
- 変数は使用する前に宣言する必要があります。
- 複数の変数を同時に宣言することもできます。
- 変数名は、アルファベット、数字、アンダースコアを含めることができますが、変数名はアルファベットまたはアンダースコアで始まる必要があります。
識別子: プログラム内のすべての変数には、一意の名前(識別子)を付ける必要があります。これにより、各変数を一意に識別できます。
定数: 定数は、プログラムの実行中に変更されない固定値です。
変数を宣言するための構文
// 単一の変数を宣言する
data_type var_name;
// 複数の変数を宣言する
data_type var1_name, var2_name, var3_name;
C++のデータ型
データ型は、変数がプログラムに格納できるデータの種類です。
1. 整数型 (Integer)
- 整数を格納するために使用されます。
- 整数は4バイトのメモリを占有します。
例
int var = 123;
2. 文字型 (Character)
- 文字を格納するために使用されます。
- 1バイトのメモリを占有します。
例
char var = ‘a’;
3. 浮動小数点型 (Floating Point)
- 単精度浮動小数点数を格納するために使用されます。
- 4バイトのメモリを占有します。
例
float num = 1.23;
4. 倍精度浮動小数点型 (Double)
- 倍精度浮動小数点数を格納するために使用されます。
- 8バイトのメモリを占有します。
例
double num = 1.2345;
5. ブール型 (Boolean)
- trueまたはfalseのいずれかの論理値を格納するために使用されます。
例
bool b = false;
6. 文字列型 (String)
- 文字列は、二重引用符で囲まれた文字の集まりです。文字列データ型は、単語または文を格納するために使用されます。
- 文字列データ型は標準ライブラリの一部であり、ヘッダーファイルで定義されています。
- 文字列クラスを使用するには、ヘッダーファイルを含める必要があります。
例
string str = “GeeksforGeeks”;
C++の入出力
1. ユーザーからの入力: iostreamライブラリの cin を使用して、ユーザーから入力を受け取ることができます。例えば、
int var;
cin >> var;
2. コンソールへの出力: iostreamライブラリの cout を使用して、コンソールに出力を表示できます。例えば、
cout << “Hello World”;
改行
\n 文字または endl を使用して、改行を挿入できます。例えば、
cout << “Hello World! \n“;
cout << “Hello World!” << endl;
C++の条件分岐
条件ステートメントを使用すると、特定の条件に基づいてプログラムのフローを制御できます。これにより、条件に基づいてコードの特定のセクションを実行できます。
1. ifステートメント
Ifステートメントは、指定された条件がtrueの場合にのみ、コードブロックを実行します。
構文
if (条件) {
// 条件がtrueの場合に実行されるコード
}
2. ネストされたifステートメント
構文
if (condition1) {
// condition1がtrueの場合に実行されるコード
if (condition2) {
// condition1とcondition2がtrueの場合に実行されるコード
}
}
3. if-elseステートメント
ifステートメント内の条件がtrueの場合、ifブロック内のコードが実行されます。それ以外の場合、elseブロック内のコードが実行されます。
構文
if (条件) {
// 条件がtrueの場合に実行されるコード
} else{
// 条件がfalseの場合に実行されるコード
}
4. else-ifステートメント
else ifステートメントを使用すると、複数の条件を順番に確認できます。
構文
if (condition1){
// condition1がtrueの場合に実行されるコード
} else if (condition2) {
// condition1がfalseでcondition2がtrueの場合に実行されるコード
} else {
// すべての条件がfalseの場合に実行されるコード
}
5. 短縮if-else(三項演算子)
三項演算子(?:)としても知られる短縮if-elseは、コード行数を減らすために使用できるif-elseステートメントと同様に機能します。
構文
(条件) ? expression1 : expression2;
条件がtrueの場合、expression1が評価され、式の結果になります。それ以外の場合、条件がfalseの場合、expression2が評価され、式の結果になります。
6. switchステートメント
switchステートメントは、式を評価し、式の値をケースと比較します。式がケースの値と一致する場合、そのケースに関連付けられたコードが実行されます。
Breakおよびdefaultキーワードは、通常、switchおよびケースで使用されます。
7. BreakとDefault
Break: breakキーワードは、いずれかのケースが一致した場合にswitchステートメントを終了するために使用されます。
Default: Defaultキーワードは、switchステートメントではオプションであり、どのケースも式の値と一致しない場合にdefaultブロック内のコードが実行されます。
構文
switch (式){
case value1:
// 式がvalue1と一致する場合に実行されるコード
break;
case value2:
// 式がvalue2と一致する場合に実行されるコード
break;
// …
default:
// 式がどのケースとも一致しない場合に実行されるコード
break;
}
C++のループ
ループは、コードブロックを複数回繰り返し実行するために使用されます。
ループの種類
1. Forループ
Forループは、コードブロックを固定回数実行するのに役立ちます。
構文
for (初期化 式; テスト 式; 更新 式) {
// ループの本体
// 実行するステートメント
}
2. Whileループ
Whileループは、指定された条件がtrueになるまで、コードブロックを繰り返し実行します。
構文
while (条件) {
// ステートメント
update_condition;
}
3. Do-Whileループ
Do-whileループも、条件がtrueになるまでコードブロックを実行しますが、whileループとdo-whileループの違いは、do-whileループは条件を確認せずに一度コードを実行し、テスト条件はループ本体の最後にテストされることです。
構文
do {
// 繰り返すコード
} while (条件);
C++の配列
配列は、同じデータ型の固定数の要素を連続したメモリアドレスに格納できるデータ構造です。
配列を宣言するための構文
dataType array_name[size];
例
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
// 文字列の配列を宣言して初期化します
string fruits[] = {"Apple", "Banana", "Orange", "Grapes"};
// 配列の各要素にアクセスして出力します
for (int i = 0; i < 4; i++) {
cout << "Fruit at index " << i << ": " << fruits[i] << endl;
}
return 0;
}
多次元配列
多次元配列とは、各要素がそれ自体が配列である配列のことです。多次元配列は、データを表形式で格納するために使用されます。
多次元配列を宣言するための構文
data_type array_name[size1][size2]….[sizeN];
data_type: 配列に格納するデータの型。
array_name: 配列の名前。
size1, size2,…, sizeN: 各次元のサイズ。
C++では、2次元配列が最も一般的に使用される多次元配列です。
例
C++
#include <iostream>
using namespace std;
int main() {
// 2D配列の宣言と初期化
int arr[3][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
// 2D配列内の要素へのアクセス
// 出力:1
cout << "Element at arr[0][0]: " << arr[0][0] << endl;
return 0;
}
C++のベクター
ベクターは、動的サイズの配列を表すために使用され、必要に応じて拡大または縮小できる動的サイズの配列です。ベクターは、同じデータ型の要素を連続したメモリアドレスに格納します。ベクターを使用するには、C++プログラムにヘッダーファイルを含める必要があります。
ベクターを宣言するための構文
vector<data_type> vector_name;
一般的に使用されるベクター関数
push_back() – ベクターの最後に要素を挿入するために使用されます。
pop_back() – ベクターの最後から要素を削除するために使用されます。
clear() – ベクターのすべての要素を削除するために使用されます。
empty() – ベクターが空かどうかを確認するために使用されます。
at(i) – 指定されたインデックス「i」の要素にアクセスするために使用されます。
front() – ベクターの最初の要素にアクセスするために使用されます。
back() – ベクターの最後の要素にアクセスするために使用されます。
erase() – 指定された位置の要素を削除するために使用されます。
例
C++
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 空のベクターを作成します
vector<int> numbers;
// push_back()
numbers.push_back(10);
numbers.push_back(20);
numbers.push_back(30);
// at()を使用して要素にアクセスする
// 出力:10
cout << "Element at index 0: " << numbers.at(0) << endl;
return 0;
}
C++の参照とポインター
参照
参照は、既存の変数への別の名前(エイリアス)です。参照は、&演算子を使用して作成されます。
例
int var = 12;
// varへの参照変数
int& ref = var;
refはvarへの参照です。
ポインター
ポインターは、別の変数のメモリアドレスを格納する変数です。ポインターは、*演算子を使用して作成し、アドレス演算子&を使用して別の変数のアドレスを割り当てることができます。
例
int i = 3;
// 変数iへのポインターまたは「iのアドレスを格納する」
int *ptr = &i;
関数
関数は、特定のタスクを実行する一連のステートメントの再利用可能なブロックです。関数を使用して、プログラムのロジックを整理できます。
関数の宣言構文
return_type function_name(parameters);
関数の定義構文
return_type function_name(parameters) {
// 関数本体
// 実行するコード
// 戻り値(該当する場合)
}
return_type: 関数が返す値のデータ型です。
function_name: 関数の名前です。
parameters: パラメータは、関数が呼び出されたときに提供される入力値です。パラメータはオプションです。
例
2つの数値を加算するプログラム。
C++
#include <iostream>
using namespace std;
// 関数の宣言
int sum(int a, int b);
// 関数の定義
int sum(int a, int b) {
return a + b;
}
int main() {
// 関数の呼び出し
int result = sum(3, 4);
cout << "Sum = " << result << endl;
return 0;
}
C++の文字列関数
1. length() 関数
文字列の長さを返すために使用されます。
構文
string str = “GeeksforGeeks”;
cout << “The length of the string is: ” << str. length();
2. substr() 関数
指定された文字列から部分文字列を抽出するために使用されます。
構文
string substr(size_t pos, size_t len) const;
pos: コピーする最初の文字の位置。
len: 部分文字列の長さ。
size_t: 符号なし整数型です。
例
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "GeeksforGeeks";
// インデックス7から始まる長さ5の部分文字列を抽出します*/
string sub = str.substr(7, 5);
cout << "Substring: " << sub << endl;
return 0;
}
3. append() 関数
文字列の最後に文字列を追加するために使用されます。
構文
string str1 = “GFG”;
string str2 = “Geeks”;
str1.append(str2);
例
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Geeksfor";
str.append("Geeks");
cout << "Appended string: " << str << endl;
return 0;
}
4. compare() 関数
2つの文字列を比較するために使用されます。
構文
str1.compare(str2);
例
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Geeks";
string str2 = "for";
string str3 = "Geeks";
int result1 = str1.compare(str2);
cout << "Comparison result: " << result1 << endl;
return 0;
}
5. empty() 関数
文字列が空かどうかを確認するために使用されます。
構文
str.empty();
例
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "GeeksforGeeks";
string str2 = "";
if (str1.empty()) {
cout << "str1 is empty" << endl;
} else {
cout << "str1 is not empty" << endl;
}
if (str2.empty()) {
cout << "str2 is empty" << endl;
} else {
cout << "str2 is not empty" << endl;
}
return 0;
}
C++のオブジェクト指向プログラミング (OOP) の主要コンセプト
C++はオブジェクト指向プログラミング言語です。OOPの主要なコンセプトは次のとおりです。
- クラス
- オブジェクト
- ポリモーフィズム
- 継承
- カプセル化
- 抽象化
1. クラス
クラスは、オブジェクトの設計図または設計図のようなものです。これは、同じ種類のオブジェクトを作成するためのテンプレートです。
2. オブジェクト
オブジェクトは、クラスのインスタンスです。オブジェクトは、データ(属性)とデータに対して実行できるアクション(メソッド)を組み合わせています。
3. ポリモーフィズム
ポリモーフィズムとは、多態性を持つことです。これは、異なるコンテキストで異なる形式を取ることができるということを意味します。
ポリモーフィズムの種類
- コンパイル時ポリモーフィズム
- 実行時ポリモーフィズム
コンパイル時ポリモーフィズムは、以下を使用して実現できます。
- 演算子のオーバーロード
- 関数のオーバーロード
実行時ポリモーフィズムは、以下を使用して実現できます。
- 関数のオーバーライド
- 仮想関数
4. 継承
あるクラス(親クラス)のプロパティを別のクラス(子クラス)に引き継ぐことを継承といいます。コードの再利用のために使用されます。
継承の種類:
- 単一継承: 派生クラスが単一の基本クラスのプロパティを継承する場合、それは単一継承と呼ばれます。
- 多重継承: 派生クラスが複数の基本クラスのプロパティを継承する場合、それは多重継承と呼ばれます。
- 多段階継承: 派生クラスが別の派生クラスのプロパティを継承する場合、それは多段階継承と呼ばれます。
- 階層的継承: