タイプ変換と例外処理


一、タイプ変換1、c言語の変換はc言語に隠性変換が存在し、隠性準変換とはコンパイラがプログラムを実行するときに自動的にタイプを変換してくれることである.例えば、int a=10;double d = 2.1; a = d;//c言語における隠性変換;char ch = (char) a;//c言語における強制変換
2、c++のタイプ変換(1)、static_cast(1_1)は基本タイプ間の変換に使用されますが!基本ポインタ間の変換はできません(1_2)継承関係のあるクラス間のオブジェクトの変換とクラスポインタの変換に使用できます(1_3)例:Father*f=NULL;親ポインタChild;//派生クラスオブジェクト;F = static_cast
//  
class Father 
{
public:
    virtual void sleep() = 0;//       ,      ;
};
//   1
class Child1:public Father 
{
public:
    virtual void sleep()
    {
        printf ("child1  
"
); } void child1() { printf ("child1
"
); } }; // 2 class Child2:public Father { public: virtual void sleep() { printf ("Child2
"
); } void Child2() { printf ("Child2
"
); } }; // Void func(Father *p) { P->sleep(); // , // sleep , Child1 *c = dynamic_cast1*>(p); // , , Child1 // ; // p , p ; // , NULL; If(c != NULL ) { P->child1(); } }

(3)const_castは変数の読み取り専用属性を除去します.たとえば、次のようにします.
Void print(const  char *str)
{
//const  char *str,   ,   c  ,   const    *,                
//char * const str         str    ;   str       ;

char *p = const<char *>(str);//       str     ;
P[2] = ‘w’; //  str         ”hello”,      str      l---->w;

}

(4)reinterpret_cast(4_1)は、整形とポインタとの間の変換int aに用いられる.Int *b = reinterpret_cast
 Student  Animal      
Animal c;
Student *s1 = reinterpret_cast(&c);

二、異常1、概念(1)異常はプログラム制御機構であり、関数機構と独立と相補関数はスタック構造で展開された上下関数で接続するプログラム制御システムであり、異常はもう一つの制御構造であり、スタック構造に依存するが、同時に複数の異常タイプを網捕条件として設定することができ、それによってタイプマッチングでスタック機構でジャンプフィードバックすることができる.(2)異常設計目的:スタックメカニズムは高度なリズム制御メカニズムであり、オブジェクト向けプログラミングではオブジェクト間の方向性、目的のある制御伝達が要求され、最初から異常はプログラム制御構造を変更し、オブジェクト向けプログラムがより効果的に動作するというテーマに適応するために、エラー処理を行うためだけではなく、プログラム制御構造を変更することである.異常設計ができた後,エラー処理において最大の利点が得られたことに気づいた.2、異常の使い方//1、異常が発生する可能性のあるコードはtryブロックに入れ、異常はthrow//2、異常は関数にまたがる//3、異常をキャプチャする必要がある//1、処理を継続させない2、処理を継続させない、継続的に向上//4、catchで異常キャプチャを行う場合は、タイプマッチングに厳格に従い、テンプレートのタイプマッチングプログラムと同様に、タイプの暗黙的な変換//5は許されず、異常が発生する可能性のあるコード端で判断し、異常が発生する条件に合致すると判断し、異常例を投げ出す:以下のコード、func 1の中に異常を処理する関数があり、単数func 1の中の異常処理関数は異常を処理しないので、上へ投げ続ける、func 1を呼び出す主関数に着いて、主関数の中で異常を処理して、上の用法の第3の文に合いました;異常が発生する可能性のある文はtryの中に置かれています.
void func1()
{
    try
    {
        divid(10,0);
    }
    catch (int e)
    {
        // printf ("func1      :%d    0
"
, e); printf ("func1 ,
"
); throw; // , throw } catch (...) { printf ("
"
); } printf ("111111111111111111111
"
); } void divid(int x, int y) { if (y == 0) { // return; throw x; // , return } printf ("%d / %d = %d
"
, x, y, x/y); } int main2_2() { try { func1(); } catch (int e) { printf (" :%d 0
"
, e); } catch (...) { printf ("
"
); } return 0; }