C ++オブジェクト指向プログラミングの研究ノート(7)

テンプレートと例外処理

テンプレートの概念

テンプレートは、それがパラメータとしてパラメータ化された型、その型を達成することができ、コードの再利用の機構を実現するためのツールです。
関数テンプレートおよびクラステンプレートは、ユーザーテンプレートクラスとテンプレートの機能を許可するように設定されているテンプレートを含み、

関数テンプレートとテンプレート関数

実際の関数テンプレートで表現する仮想タイプで、この一般的な機能は、関数テンプレートと呼ばれ、その関数の戻り値の型とパラメータ型が指定されていない、汎用的な関数を作成します。
関数を呼び出すときに異なる機能の機能を実現するために、テンプレートの種類に応じて仮想タイプ(テンプレート引数)引数を交換することになります。
次のように文の形式は

template<typename 类型参数>
返回类型 函数名 (模板形参表)
{
    函数体
}
或
template<class 类型参数>
返回类型 函数名 (模板形参表)
{
    函数体
}

これは、テンプレートのキーワードは、テンプレートを宣言表しテンプレート宣言、です。
Typeパラメータは、実際には仮想型の名前で、今では、特定のタイプを指定しませんが、関数テンプレートを使用したときにインスタンス化する必要があります。
前者のタイプのパラメータは、キーワード型名またはクラスを追加する必要があり、その役割と同じで表現され、後続のパラメータは、仮想型名です。

テンプレート関数maxの例

template<typename T>
T mymax(T a,T b)
{
    if(a>b) return a;
    return b;
}
或
template<class T>
T mymax(T a,T b)
{
    if(a>b) return a;
    return b;
}

それは交換するインスタンス化するパラメータの関数テンプレートの型名キーワードクラスやタイプ、すなわち、実際のデータ型を使用する場合は
テンプレート引数と呼ばれるテンプレート型パラメータインスタンス化パラメータを機能します

注:
1. Typeパラメータは、複数の関数テンプレートを使用できますが、キーワード(またはクラス)をtypenameですしなければならないテンプレートの各タイプのパラメータ定義セクション前の
テンプレートとテンプレート定義文文との2機能が許可されていません声明
3.関数テンプレートがオーバーロードすることができる
。4.テンプレートを非テンプレート関数がオーバーロードすることができ、同じ名前の関数では、非呼び出し順序が正確に機能と一致するテンプレート、関数テンプレートのインスタンス化を見つけることです

クラステンプレートテンプレートクラス

仮想タイプが表すと、いわゆるクラステンプレートは、実際には、共通のクラス、データメンバ、戻り型とパラメータ型は、特に指定されていないメンバ関数を確立している
として、次の基本的な形式であります

template<typename 类型参数>
class 类名
{
    类成员声明
};
或
template<class T>
class 类名
{
    类成员声明
};

これは、テンプレートのキーワードは、テンプレートを宣言表しテンプレート宣言、です。
Typeパラメータは、実際には仮想型の名前で、今では、特定のタイプを指定しませんが、クラステンプレートがインスタンス化されなければならないとき。
前者のタイプのパラメータは、キーワード型名またはクラスを追加する必要があり、その役割と同じで表現され、後続のパラメータは、仮想型名です。

テンプレート定義のオブジェクトクラスを使用して、以下のフォーム

类模板名<实际类型名>对象名[(实参表列)];

型パラメータのメンバ関数が存在する場合には、メンバ関数テンプレートは、インビトロ、テンプレートクラスで定義することができ、この時間は、次の条件がにしている
。1.関数の定義テンプレートの必要性は、メンバーの前に宣言した
「関数名の接頭辞イディオムの2クラス名<パラメータタイプ> :: "

次のように一般的な形式は次のとおりです。

template<typename 类型参数>
函数类型 类名 <类型参数> :: 成员函数名(形参表)
{

}

注:
1.各テンプレートのクラス定義の前に、テンプレートのニーズは、テンプレートの使用に基づいて、文を先行し、テンプレートを積んだの背後にあるクラス名でなければなりません。<パラメータタイプ>
2.テンプレートクラスは、複数のパラメータを持つことができます

例外処理

コンパイルしたときに実行すると、エラーエラー:一般的なプログラムエラーは2つのカテゴリに分類されています。
実行時の手続きのエラーは例外処理として知られている異常、異常なプロセスと称される

方法

例外処理のためのC ++の例外は、関数の実行中に発生した場合、最後の缶が処理されない場合、関数は、親プロセスにアップロードするステップバイステップに合格し、プログラムの終了ということである
小切手でのC ++の例外処理メカニズムは、スローとキャッチ三つの部分、それぞれ、3つのステートメントで投げ、してみてください、キャッチ

例外がスローされます

例外がキャッチステートメントでスローされる
フォーマットthrow 表达式

特定のプログラムに異常がある場合は、キャプチャするために、異常対応キャッチフレーズで呼び出し元に例外をスローするthrowステートメントを使用することができます
表現throwステートメントを表現の型で表現されている例外スローされた例外の種類のタイプを示す

int Div(int x,int y)
{
    if(y==0) throw y;
    return x/y;
}
//当y=0时,抛出int型异常
異常な検査とキャプチャ

チェックして、異常な使用tryおよびcatchステートメントキャプチャ
形式を

try
{
    被检查的复合语句
}
catch (异常类型声明1)
{
    进行异常处理的复合语句1
}
......
catch (异常类型声明n)
{
    进行异常处理的复合语句n
}

複合文は、try文の後にチェックされている場合には、コードが保護セクションと呼ばれているという異常な文を引き起こす可能性があります。throw文は、この例外をスローどこ珍しいがある場合に予想される例外は、それはしようと、場所を特定のプログラムコードを発生する可能性がある場合

キャッチスロースローされた例外を捕捉するために使用される、catch節の例外ハンドラが複合文で、宣言セクションでは、例外のcatch節の例外処理の種類の種類を示し、適切な例外ハンドラによって実行された例外タイプのcathcをキャッチ


そうでなければ効果、tryブロックで1文の検出または配置する必要があります
2.tryとキャッチが中括弧で囲まれた有用な化合物のステートメント、かっこでも一つだけの文を省略かっこできない場合はあってはならない
3 try文は、複数のcatchを持つことができますが、文全体はtryブロックすることができ
、その後、「...」型がcatch節の例外情報に指定されていない場合4.が、3つの楕円の使用任意の薬学的に異常情報表し、
いくつかのケースでは5をthrow文が式を含まないかもしれない、それは情報が処理されている。この時点で例外がスローされます再び最高の
例外がキャッチされていない場合は6、システムは、システムを呼び出します機能は特に、呼び出しはプログラムを終了するために中止し、終了します

おすすめ

転載: www.cnblogs.com/springfield-psk/p/12076948.html