標準入出力

  C と同じように,C++ においても以下の 4 つのストリームがプログラム実行開始と共に開いています.
cin  : 標準入力
cout : 標準出力
cerr : 標準エラー出力
clog : バッファ付き出力		
  C++ の入出力システムは,階層的に構成されたストリームに関するクラスとして定義され,iostream というヘッダファイルに含まれています.入出力の最も基本的なクラスは ios であり,そこから strstreambaseistream,及び,ostream の 3 つのクラスが派生しています.また,iostream は,istream 及び ostream から派生しています.

  cin や cout を使用することにより,以下の例のように,出力する変数の型を意識しないで,入出力が可能になります.また,行内のスペースを無視したくない場合は,istream のメンバー関数 getline を使用します.最大 (MAX_LINE - 1) 文字を読み込み,最後に NULL 文字が付加されます.デフォルトの行区切り文字は改行文字ですが,それ以外の区切り文字を指定したいときは,getline の 3 番目の引数として指定可能です.なお,istream のメンバー関数 get を使用して 1 行ずつ,または,1 文字ずつの入力も可能です.詳細については,付録を参照してください.

/****************************/
/* 標準入出力               */
/*      coded by Y.Suganuma */
/****************************/
#include <iostream>
#define MAX_LINE 50
using namespace std;

int main()
{
	int i;
	double x;
	char c[10], line[MAX_LINE];

	cout << "1行,適当な文字列を入力して下さい ";
	cin.getline(line, MAX_LINE);

	cout << "整数を入力して下さい ";
	cin >> i;

	cout << "実数を入力して下さい ";
	cin >> x;

	cout << "文字列を入力して下さい ";
	cin >> c;

	cout << "整数 " << i << " 実数 " << x << " 文字列 " << c <<"\n";
	cout << line << "\n";

	return 0;
}
		

  このプログラムの出力は,例えば,以下のようになります.
整数 10 実数 3.14 文字列 suzuki
test input		
  演算子 << をオーバーロードすることによって,クラスの内容を通常の変数と同じように出力可能になります.次のプログラムのクラス Xyz は,3 次元空間の点の座標を定義しています.なお,演算子のオーバーロードを定義している関数において,cout を使用しないのは,オーバーロードを任意のストリームに対応させるためです.

/****************************/
/* クラスの出力             */
/*      coded by Y.Suganuma */
/****************************/
#include <iostream>
using namespace std;

/*******************/
/* クラスXyzの定義 */
/*******************/
class Xyz
{
	public:
		int x, y, z;
		Xyz(int a, int b, int c)   // コンストラクタ
		{
			x = a;
			y = b;
			z = c;
		}
		friend ostream& operator << (ostream &, Xyz);   // <<のオーバーロード
};

/********************************************/
/* 座標の表示(演算子<<のオーバーロード) */
/********************************************/
ostream & operator << (ostream &stream, Xyz ten)
{
	stream << "   (" << ten.x << ", ";
	stream << ten.y << ", ";
	stream << ten.z << ")\n";
	return stream;
}

/************/
/* main関数 */
/************/
int main()
{
	Xyz a(0, 10, 20), b(-10, 5, 50);

	cout << a << b;

	return 0;
}
		

  このプログラムの出力は,以下のようになります.
(0, 10, 20)
(-10, 5, 50)