编写自己的异常类

#include <iostream>
#include <stdarg.h>
#include <vector>
#include <fstream>
#include <exception>
#include <string>
#include <stdexcept>
#include <sstream>

using namespace std;

class FileError :public runtime_error {
public:
	FileError(const string& fileIn) : runtime_error(""), mFile(fileIn) {}
	virtual const char* what() const throw () { return mMsg.c_str(); }
	string getFileName() { return mFile; }
protected:
	string mFile, mMsg;
};
class FileOpenError : public FileError {
public:
	FileOpenError(const string& fileNameIn);
};

FileOpenError::FileOpenError(const string& fileNameIn) : FileError(fileNameIn)
{
	mMsg = "Unable to open " + fileNameIn;
}

class FileReadError :public FileError {
public:
	FileReadError(const string& fileNameIn, int lineNumIn);
	int getLineNum() { return mLineNum; }
protected:
	int mLineNum;
};

FileReadError::FileReadError(const string& fileNameIn, int lineNumIn) : FileError(fileNameIn), mLineNum(lineNumIn)
{
	ostringstream ostr;
	ostr << "Error reading" << fileNameIn << " at line " << lineNumIn;
	mMsg = ostr.str();
}

void readIntegerFile(const string& fileName, vector<int>& dest) throw(FileOpenError, FileReadError)
{
	ifstream istr;
	int temp;
	string line;
	int lineNumber = 0;
	istr.open(fileName.c_str());
	if (istr.fail()) {
		throw FileOpenError(fileName);
	}
	while (!istr.eof()) {
		getline(istr, line);
		lineNumber++;
		istringstream lineStream(line);
		while (lineStream >> temp) {
			dest.push_back(temp);
		}
		if (!lineStream.eof()) {
			istr.close();
			throw FileReadError(fileName, lineNumber);
		}
	}
	istr.close();
}
int main()
{
	const string fileName = "IntergerFile.txt";
	vector<int> dest;
	try {
		readIntegerFile(fileName, dest);
	}
	catch (const FileError& e) {
		cerr << e.what() << endl;
		return 1;
	}
	for (size_t i = 0; i < dest.size(); i++) {
		cout << dest[i] << " ";
	}
	cout << endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值