C++クラスによるファイル処理の基本と実装方法
このチュートリアルでは、C++のクラスを使ったファイル処理の方法について解説します。
C++におけるファイル処理の仕組み
C++では、<fstream>ヘッダーに含まれるifstream(入力用)やofstream(出力用)といったストリームクラスを利用してファイル操作を行います。これらの標準機能に加えて、ユーザー自身がクラスを定義し、ファイルとのやり取りを行う独自の関数を作成することも可能です。
以下は、ofstreamによるファイルへの書き込みと、ifstreamによる読み込みを実装したサンプルコードです。
サンプルコード
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// ofstreamオブジェクトを作成
ofstream fout;
string line;
fout.open("sample.txt");
// ファイルが正常に開いている間、入力を書き込む
while (fout) {
getline(cin, line);
if (line == "-1")
break;
fout << line << endl;
}
fout.close();
// 読み込み用にifstreamオブジェクトを作成
ifstream fin;
fin.open("sample.txt");
while (fin) {
getline(fin, line);
cout << line << endl;
}
fin.close();
return 0;
}
コードの解説
ofstream(ファイルへの書き込み)
ofstreamはファイルに出力するためのクラスです。open()で「sample.txt」を開いた後、標準入力から受け取った文字列を1行ずつファイルに書き込んでいきます。「-1」が入力された時点でループを抜け、書き込みを終了します。
ifstream(ファイルからの読み込み)
ifstreamはファイルから入力するためのクラスです。同様に「sample.txt」を開き、getline()で内容を1行ずつ読み取り、coutによって標準出力に表示します。
close()によるリソースの解放
一連の処理が完了したら、close()を呼び出してファイルを閉じます。これによりバッファの内容が確実に書き込まれ、リソースリークを防ぐことができます。
実行結果の例
【入力】 Hello World C++ File Handling -1 【出力】 Hello World C++ File Handling
-
C++で同一直線上に存在する最大点数を求めるアルゴリズム
問題概要 2次元平面上に複数の点が与えられたとき、同じ直線上に存在する点の最大数を求めるのがこの問題の目的です。 例えば、下図のような6つの点が与えられた場合、最も多くの点が乗っている直線上には4つの点が存在します。 解法のアプローチ この問題は、隣り合う2点を通る直線を基準にして、残りのすべての点がその直線上に乗っているかどうかを順番に判定していくことで解けます。 3点 (x1, y1)、(x2, y2)、(x3, y3) が同一直線上にあるかどうかは、「傾きが等しい」こと、すなわち外積(クロス積)が0になることを利用して判定できます。 (y3 − y2) × (x2 − x1) = (
-
C++の例外処理入門!try・catch・throwの基本と標準例外クラス一覧
C++における例外処理(Exception Handling)とは、プログラムの実行時に発生するエラー(ランタイムエラー)を適切に扱うための仕組みです。例外とは、実行時に送出(スロー)されるイベントのことで、C++ではすべての標準例外が std::exception クラスから派生しています。もし例外を捕捉しなかった場合、例外メッセージが出力され、プログラムは強制終了してしまいます。 C++標準では、例外関連のクラスが <exception> ヘッダに定義されており、プログラムの中で自由に利用できます。親子関係によるクラス階層は次のようになっています。 C++の主な標準例外クラス