Stream 関連クラスの継承関係 (C++をもう一度)
[履歴] [最終更新] (2016/01/09 14:25:32)
最近の投稿
注目の記事

概要

  • istream : オブジェクトは cin
  • ostream : オブジェクトは cout, cerr(エラー出力。バッファリングしない), clog(ログ出力。バッファリングする)
  • iostream : istream と ostream の派生クラス (多重継承)
  • fstream : iostream の派生クラス
  • stringstream : iostream の派生クラス

という継承関係があり、アップキャストを考える場合などに有用な知識です。また、ファイルストリームでの知識が、以下のように cin でも利用できます。

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

int main() {
    int n;

    while(true) {
        cin >> n;

        // エラーでない場合
        if(! cin.fail()) {
            break;
        }

        // ファイル終端によるエラーの場合
        if (cin.eof()) { // cin でファイル終端とは Ctrl-D などのこと。
            exit(EXIT_FAILURE);
        }

        // その他のエラー (int型でない入力)
        char ch;
        cin.clear(); // ロック解除
        cin >> ch; // 読み捨てる
    }

    cout << "INPUT: " << n << endl;

    return 0;
}
関連ページ
    概要 POCO (POrtable COmponents) は Boost と同様に有用な C++ のクラスライブラリです。簡単に使用方法を記載します。Boost Software License で配布されていますが Boost への明示的な依存はなく単体で動作します。 A Guided Tour Of The POCO C++ Libraries