このブログ記事は、C++の基本を紹介します。

はじめに
以前の記事で述べたように、C++はCの拡張であり、そのためCの多くの構文や機能がC++でも互換性があります。 そのため、このC++の基礎に関する記事では、Cでは利用できなかったいくつかの基本的な機能に焦点を当てます。 まだCシリーズを読んでいない場合は、そちらをチェックすることを強くお勧めします。C++の環境設定はCと同じなので、 まだ環境設定をしていない場合は、記事「Road to C Programmer #0 - Setting Up Environment」を参照してください。 C++では、ファイル名の拡張子に「.cpp」を使用し、「gcc」コマンドの代わりに「g++」コマンドでコードをコンパイルします。
IOストリーム (IO Stream)
標準ストリームとは、プログラムとその環境の間で入力と出力(IO)を行うために事前に接続された通信チャンネルです。
IOには、標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr)の3つの接続があります。Cのprintf
関数は、
stdoutストリームにフォーマットされた文字列を書き込むための関数です。C++では、引き続きprintf
関数を使用できますが、
次のように記述することもできます。
#include <iostream>
using namespace std;
int main () {
cout << "Hello World" << endl;
return 0;
}
using namespace std
を使うことで、iostream
ライブラリに関連する標準ストリームの機能にアクセスできます。
(namespaceについては今後説明します。)cout
はコンソール出力に対応し、あらゆる型の値をコンソールに出力する
ことができます。<<
はテキスト挿入演算子で、操作を連鎖させることができます。endl
は文の終わりを示し、\nと同等です。
次のようにしてユーザー入力を受け取ることができます。
#include <iostream>
using namespace std;
int main () {
float x;
cout << "floatを入力して下さい: ";
cin >> x;
cout << "あなたの入力: " << x << endl;
return 0;
}
cin
(コンソール入力)は、先行する空白を無視してコンソールから入力を受け取るもので、>>
はストリーム抽出演算子です。
後続の空白とその後のテキストも無視されます。入力を変数の宣言された型にキャストできない場合、cin
は1を出力します。
したがって、次のようにして入力エラーを防ぐことができます。
#include <iostream>
#include <limits>
using namespace std;
int main () {
float x;
cout << "floatを入力して下さい: ";
if (cin >> x) {
cout << "あなたの入力: " << x << endl;
}
else {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "無効な入力です。" << endl;
}
return 0;
}
cin.clear()
は入力バッファのエラーをクリアするために使用します。
cin.ignore()
は、\n
に遭遇するまで最大ストリームサイズ
を無視するので、後続のcin
が無効な入力を抽出しないようにします。iostream
ライブラリには他にも多くの
関数がありますが、上記は知っておくべき非常に基本的なものです。
文字列 (String)
Cでは、文字列は単なる文字(char)の配列であり、メモリの安全性に関して文字列がどれほど危険であるかを学びました。
開発者の負担を少しでも軽くするために、C++にはstring
オブジェクトを提供するstring
ライブラリがあります。
#include <iostream>
#include <string>
using namespace std;
int main () {
string x = "abcd";
cout << "x: " << x << endl;
cout << "size: " << x.size() << endl; // 文字列の長さ = 4
cout << "length: " << x.length() << endl; // 文字列の長さ = 4
cout << "3番目のインデックスのx: " << x[3] << endl;
cout << "3番目のインデックスのx: " << x.at(3) << endl;
cout << "1番目のインデックスから3文字のx: " << x.substr(1, 3) << endl;
x += "efgh";
cout << "x: " << x << endl;
x.append("ijkl");
cout << "x: " << x << endl;
if (x.empty()) {
cout << "xは空です。" << endl;
} else {
cout << "xは空ではありません。" << endl;
x.clear();
cout << "xは今空です。" << endl;
}
return 0;
}
上記は、string
オブジェクトで利用できるいくつかのメソッドを示しています。size
やlength
を使って文字列の長さを
取得したり、at
、[]
、substr
を使って文字や部分文字列を取得したり、+
演算子やappend
を使って文字列を追加し
たりできます。empty
を使って文字列が空かどうかを確認し、clear
を使って文字列をクリアすることもできます。これは、
これらの便利な関数をC++で利用できるようにするためにOOPを活用しています。string
ライブラリには、次のように型を文
字列に変換するための関数もあります。
#include <iostream>
#include <string>
using namespace std;
int main () {
string numberStr = to_string(3.14);
double number = stod(numberStr);
return 0;
}
string
ライブラリは、空白を含むユーザー入力を受け取る際に便利なgetline
関数も提供しています。
#include <iostream>
#include <string>
using namespace std;
int main () {
string fullname;
cout << "フルネームを入力してください: " << endl;
getline(cin, fullname);
cout << "こんにちは, " << fullname << endl;
return 0;
}
cin >> fullname
を使用して、"Shohei Ohtani"のように空白を含むフルネームを入力すると、空白の後にある
"Ohtani"が無視されます。getline
を使うと、空白の後のテキストも取得できます。
クイズ
この記事では、学習した内容を確認するためのクイズを設けます。記事のメイン部分を読んだ後に、ぜひ自分で問題を解いてみることを強くお勧めします。各問題をクリックすると答えが表示されます。
リソース
- Portfolio Courses. 2022. Console Output With cout Basics | C++ Tutorial. YouTube.
- Portfolio Courses. 2022. User Input With cin Basics | C++ Tutorial. YouTube.
- Portfolio Courses. 2022. Basics Of Using The string Type | C++ Tutorial. YouTube.