c++异常处理(使用虚函数)

来源:互联网 发布:勃起后笔直向上 知乎 编辑:程序博客网 时间:2024/05/21 14:42
#include <iostream>using namespace std;const int DefaultSize = 10;class Array{public:Array(int itsSize = DefaultSize);~Array(){delete[] pType;}const int & operator[](int offSet) const;int & operator[](int offSet);int GetitsSize() const {return itsSize;}class xBoundary {};class xSize{public:xSize(int size):itsSize(size){}~xSize(){}int GetSize() { return itsSize; }virtual void PritError(){cout << "xiabiaofashengcuowu" << itsSize << endl;}protected:int itsSize;};class xZero:public xSize {public:xZero(int size):xSize(size){}virtual void PrintError(){cout << "bunengshiling" << endl;}};class xNegative :public xSize {public:xNegative(int size) :xSize(size) {}virtual void PrintError(){cout << "bunengshifu" <<xSize::itsSize<< endl;}};class xTooSmall :public xSize {public:xTooSmall(int size) :xSize(size) {}virtual void PrintError(){cout << "taixiao" << endl;}};class xTooBig :public xSize {public:xTooBig(int size) :xSize(size) {}virtual void PrintError(){cout << "taida" << endl;}};private:int *pType;int itsSize;};int main(){Array a;Array intArray(20);try{Array b(-12);for (int j = 0; j < 100; j++){intArray[j] = j;cout << "int" << j << "ok" << endl;}}catch (Array::xBoundary){cout << "yuejie" << endl;}catch (Array::xSize& exp){exp.PritError();}/*catch (Array::xZero){cout << "buneng0" << endl;}catch (Array::xTooBig){cout << "taida" << endl;}catch (Array::xTooSmall){cout << "taixiao" << endl;}catch (Array::xNegative theException){cout << "bunengshifushu" <<theException.GetSize()<< endl;}catch (...){cout << "weizhi" << endl;}*/cin.get();return 0;}Array::Array(int Size): itsSize(Size){if (Size == 0)throw xZero(Size);if (Size < 0)throw xNegative(Size);if (Size < 10)throw xTooSmall(Size);if (Size > 30000)throw xTooBig(Size);pType = new int[Size];for (int i = 0; i < Size; i++){pType[i] = 0;}}const int & Array::operator [](int offSet) const{// TODO: 在此处插入 return 语句int size = this->GetitsSize();if (offSet >= 0 && offSet < size){return pType[offSet];}throw xBoundary();}int & Array::operator [](int offSet){// TODO: 在此处插入 return 语句int size = this->GetitsSize();if (offSet >= 0 && offSet < size){return pType[offSet];}throw xBoundary();}

try中方可能出错代码 throw抛出错误 catch捕获

0 0
原创粉丝点击