02_入出力と名前空間

はじめに

この章では、C++における画面出力・キーボード入力の基本を確認します。また、標準機能を管理する「名前空間」の使い方についても紹介します。

出力と入力の基本

#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    cout << "名前を入力してください:";
    cin >> name;
    cout << "こんにちは、" << name << " さん!" << endl;
    return 0;
}

解説

演算子 << と >> の役割

演算子 C++での意味
<< 出力ストリーム演算子 cout << "Hello" << endl;
>> 入力ストリーム演算子 cin >> 変数;

std:: を明示して書く例

using namespace std; を書かない場合、標準ライブラリの機能には std:: を付ける必要があります。

#include <iostream>
#include <string>

int main() {
    std::string name;
    std::cout << "名前を入力してください:";
    std::cin >> name;
    std::cout << "こんにちは、" << name << " さん!" << std::endl;
    return 0;
}

解説

#include と std:: は別の役割(両方必要)

初心者がよく混同しますが、#include <string>std::string別々のことを指示 していて、どちらか片方だけでは足りません
書くもの 役割 イメージ
#include <string> string 機能をコードに取り込む 本棚に「string」という本を追加する
std::string その string が どの名前空間にあるか を指定 その本は「std」というセクションにある、と指示する
片方だけだとどうなる? C言語の #include <stdio.h> はそれだけで printf が使えました。これは C言語には「名前空間」という仕組みがないからです。C++ では #include だけでは足りない、というのが大事なポイントです。

名前空間(namespace)とは

名前空間とは、関数や変数・クラスなどの名前が衝突しないよう「グループ分け」する仕組みです。

なぜ名前空間が必要か?
たとえば、別々のライブラリが同じ名前の関数を定義していた場合、区別がつかなくなります。std:: を付けることで「これは標準ライブラリの cout だ」と明示できます。
書き方 特徴
using namespace std; を使う 省略して書ける。小規模・学習向き
std:: を毎回書く 明示的で安全。大規模開発に向く

コーディング演習

演習1:基本コードを動かす

02_01_io.cpp を作成し、次のコードを入力して実行しましょう。
// io.cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    int age;
    cout << "名前を入力してください:";
    cin >> name;
    cout << "年齢を入力してください:";
    cin >> age;
    cout << "こんにちは、" << name << " さん!" << endl;
    cout << "あなたは " << age << " 歳ですね。" << endl;
    return 0;
}

演習2:コードを改造する

02_01_io.cpp をコピーして 02_02_io_mod.cpp として保存し、次の変更を加えてみましょう:
ヒントを見る using namespace std; を消した後、エラーが出る箇所を std:: 付きに書き換えましょう。
std::string city;std::cin >> city; のように書けます。

理解度チェック

問題02-1

次のコードを実行し、「Sato」と入力した場合、何が表示されるか。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    cout << "名前を入力してください:";
    cin >> name;
    cout << "こんにちは、" << name << " さん!" << endl;
    return 0;
}
解説を表示 正解:ウ
cin >> name で "Sato" が入力され、cout << "こんにちは、" << name << " さん!" で「こんにちは、Sato さん!」と表示されます。

問題02-2

using namespace std; を書かない場合、cout を使うための正しい書き方はどれか。

解説を表示 正解:イ
coutstd 名前空間に属するため、using namespace std; なしで使う場合は std::cout と書く必要があります。

問題02-3

次のコードはコンパイルエラーになる。その原因として正しいものはどれか。

#include <iostream>

int main() {
    cout << "Hello" << endl;
    return 0;
}
解説を表示 正解:ア
coutendlstd 名前空間に属しています。using namespace std; を書くか、std::coutstd::endl と明示する必要があります。

問題02-4

C++で複数の値を cout で一度に出力したい場合の正しい書き方はどれか。変数 x = 10 として「x の値は 10 です」と出力する。

解説を表示 正解:イ
C++では << を繰り返すことで複数の値を連続して出力できます。+ での文字列結合(ア)は int 型と直接使えないためエラーになります。

まとめ