免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
外ケースによって例示することができる。このコンテンツの異常な使用に継承されたクラス階層に例外を使用して、
この場合の要件は、このです:
配列クラスMyArrayという設計、過負荷[]操作、
配列を初期化し、配列有効な検査の数
1)インデックス<0スローeNegative
2)インデックス= 0スローEzero
。3)インデックス、> 1000スローeTooBig
。4)指数<10 eTooSmallスロー
5)以上クラスベースESIZE親、達成、および仮想無効printErr()出力誤差を定義するために構成されたパラメータを持っています。
#include <stdio.h>
class MyArray
{
public:
MyArray(int len);
~MyArray();
int& operator[](int index);
class eSize
{
public:
eSize(int len)
{
size = len;
}
virtual void printErr() = 0;
protected:
int size;
};
class eNegative :public eSize
{
public:
eNegative(int size) :eSize(size)
{
}
virtual void printErr()
{
printf("抛出异常参数等于0\n");
}
};
class eZero :public eSize
{
public:
eZero(int size) :eSize(size)
{
}
virtual void printErr()
{
printf("抛出异常参数小于0\n");
}
};
class eTooBig :public eSize
{
public:
eTooBig(int size) :eSize(size)
{
}
virtual void printErr()
{
printf("抛出异常参数大于1000\n");
}
};
class eTooSmall :public eSize
{
public:
eTooSmall(int size) :eSize(size)
{
this->size = size;
}
virtual void printErr()
{
printf("抛出异常参数小于10\n");
}
};
private:
int len;
int *m_p;
};
MyArray::MyArray(int len)
{
if (len < 0)
throw eNegative(len);
if (len == 0)
throw eZero(len);
if (len >1000)
throw eTooBig(len);
if (len <10)
throw eTooSmall(len);
this->len = len;
this->m_p = new int[this->len];
}
MyArray::~MyArray()
{
if (m_p != NULL)
{
delete[]m_p;
m_p = NULL;
}
len = 0;
}
int& MyArray::operator[](int index)
{
return m_p[index];
}
int main()
{
try
{
MyArray a(5);
for (int i = 0; i < 10; i++)
a[i] = i;
printf("%d\n", a[2]);
}
catch (MyArray::eSize& e)
{
e.printErr();
}
catch (...)
{
printf("其他类型异常\n");
}
return 0;
}
この場合、我々は、アレイの様々な機能を実行することができ、配列のクラスを作成して、ここで、これは前のコースの内容であることを言っているわけではない、と初期化パラメータの配列にチェックする必要がありますこのレッスンの内容を使用して、我々は結果を得るために、例外処理パラメータに必要です。
ここでは、配列クラスの例外を作成し、例外クラスの配列の一部が、このクラスはいくつかのサブカテゴリーから導出される、生成されたオブジェクトは、状況に応じてスローされ、サブカテゴリ、我々は異常な結果を拾いますprintErrが仮想であるため、ピックアップしたい時は、単に親クラス参照を使用し、Eは、基本クラスの参照である、多型は、対応するフィードバック異常、ケースのような良好な表示を発生することがクラス階層の異常。