澳门威利斯人_威利斯人娱乐「手机版」

来自 办公软件 2019-11-16 06:37 的文章
当前位置: 澳门威利斯人 > 办公软件 > 正文

类与对象的异常,被__finally捕获的异常

C 线索二叉树求最矮公共老爹节点

#include 
#include 
#include 
using namespace std;

class Expection//一个自定义的异常类
{
    public:
    void    Null_Thing()//空指针异常.
    {
        cout<<"Expection!!!,this is null"<
struct Node
{
    Type data;
    Node *left;
    Node *right;
    bool ltag;//线索我用bool类型存储。
    bool rtag;
    Node(Type d = Type()):data(d),left(NULL),right(NULL),ltag(false),rtag(false){}
};

template
class SBTree
{
    public:
    SBTree()
    {
        root = NULL;
    }
    void Insert(const char *s)
    {
            Insert(root,s);
    }
    void Printf()
    {
        Printf(root);
    }
    void Init_Thread()//二叉树的线索化。
    {
        Node *pre = NULL;
        _Init_Thread(root,pre);
    }
    Node *Fist()
    {
        return Fist(root);
    }
    void Init_SetDList()//构造双向链表,以root为头节点.
    {
        _Init_SetDList(root);           
    }
    Node * Find(Type val)//寻找节点,找到则正常,如果找不到则抛出异常。
    {
        Node *p = NULL;
        try
        {
          p = Find(root,val);
        }
        catch(Expection exp)
        {
            exp.Null_Thing();
        }
        return p;
    }
    Type GetValue(Node *t)//将节点的Type值取出。
    {
        try
        {
        t = Find(t->data);
        }
        catch(Expection exp)
        {
            exp.Null_Thing();
        }
        return t->data;
    }
    Type GetCommParent(Type val1,Type val2)//得到两个节点的最矮公共父亲节点,这才是我想重点写的,其他的都是辅助,
    {                                                                            
        if(_GetCommParent(root,val1,val2))
                            return _GetCommParent(root,val1,val2)->data;
    }
    private:
    Node* _GetCommParent(Node *t,Type val1,Type val2)
    {
        stack* > st;
        if(Find_commparent(t,val1) && Find_commparent(t,val2))
        st.push(t);
        while(1)
        {
            if(Find_commparent(t->left,val1) && Find_commparent(t->left,val2))
                {
                t=t->left;
                st.push(t); 
                }
            else if(Find_commparent(t->right,val1) && Find_commparent(t->right,val2))
                {
                t=t->right;
                st.push(t);
                }
            else
                {
                 if(st.empty()==false)
                    {
                    t = st.top();//用栈搞吧,好像与我开始的本意不符合。
                    st.pop();//悲剧的我没有用递归搞出来,想的我要吐了,思想是懂了,可是代码总是有问题,唉,容我三思。
                    return t;
                    }
                    else return NULL;
                }
        }
    }
    bool Find_commparent(Node *t,Type val)
    {
        if(t==NULL) return false;
        if(t->data == val)return true;
        else
        {
            bool BOOL = Find_commparent(t->left,val);
            if(BOOL==true)
                return true;
              BOOL =  Find_commparent(t->right,val);
            if(BOOL == true)
                return true;
        }
    }
    Node* Find(Node *t,Type val)
    {
        Node *p = NULL;
        try
        {
            p = First(t);
        }
        catch(Expection exp)
        {
            exp.Null_Thing();
        }
        while(p!=NULL)
        {
            if(p->data == val)break;
            p = p->right;
        }
        if(p!=NULL)return p;
        else throw Expection();
    } 
    void _Init_SetDList(Node *t)
    {
            Node *p = NULL;
            try
            {
                p = First(t);
            }
            catch(Expection exp)
            {   
                    exp.Null_Thing();
            }
            root = p;
            while(p!=NULL)
            {
                cout<data<<" ";
                p = p->right;
            }                           
    }
    Node *First(Node *t)
    {
        if(t==NULL)throw Expection();
        else
        while(t->left!=NULL)
        {
            t = t->left;
        }
        return t;
    }
    bool _Init_Thread(Node *&t,Node *&pre)
    {
        if(t==NULL)
            {
            return true;
            }
        _Init_Thread(t->left,pre);

        if(pre != NULL && pre->right==NULL)
        {
            pre -> right = t;
            pre -> rtag = true; 
        }

        if(t!=NULL && t->left==NULL)
        {
            t->left = pre;
            t->ltag = true;
        }   
        pre = t;
        _Init_Thread(t->right,pre);
    }

    bool Insert(Node *&t,const char *&s)
    {
        if(*s=='#')
        {
            t = NULL;
            return true;
        }   
        else
        {
            t = new Node(*s);
            Insert(t->left,  s);
            Insert(t->right,  s);       
        }
    }

    void Printf(Node *t)
    {
        if(t!=NULL)
        {
            cout<data<<"t";
            Printf(t->left);
            Printf(t->right);
        }
    }
    private:
    Node *root;
};
int main()
{   
    char str[]="ABCD###EF##G##HI##J#K##";
    SBTree sb;
    sb.Insert(str);
    //sb.Init_Thread();
    //sb.Find('2');
    cout<<<

#include #include #include using namespace std;class Expection//多个自定义的要命类{ public: void Null_Thing()//空指针卓殊...

【C/C 大学】0831-类与指标的分外/面试100题1-100

  1. /// @file ClassroomExamples.c  
  2. /// @brief 验证C语言的非标准try, catch  
  3.   
  4. #include <windows.h>  
  5. #include <stdlib.h>  
  6. #include <stdio.h>  
  7. #include <stddef.h>  
  8. #include <crtdbg.h>  
  9. #include <conio.h>  
  10.   
  11. void fnTest_TryCatchByM$();  
  12.   
  13. int main(int argc, char *argv[ ], char *envp[ ])  
  14. {  
  15.     fnTest_TryCatchByM$();  
  16.     printf("END, press any key to quitn");  
  17.     getchar();  
  18.       
  19.     return 0;  
  20. }  
  21. 澳门威斯尼人最新网站,  
  22. void fnTest_TryCatchByM$()  
  23. {  
  24.     int* p = 0x00000000;   // pointer to NULL  
  25.     puts("hello");  
  26.   
  27.     /// __try, __finally, __except都不是C规范函数, 是M$自身家的  
  28.     /// 为了通用性, 依然绝不__x函数  
  29.     /// __try要有配没有错__finally或__except, 只可以配对三个  
  30.     __try  
  31.     {  
  32.         puts("in try");  
  33.         __try  
  34.         {  
  35.             puts("in try");  
  36.             /// 假设不在__try中, 就C05了  
  37.             *p = 13;    // causes an access violation exception;  
  38.         }  
  39.         __finally  
  40.         {  
  41.             /// 被__finally捕获的特别, 还大概会被上一级的__except捕获  
  42.             /// 反之不行(先被__except捕获, 不会再被上顶尖的__finally捕获)  
  43.             puts("in finally");  
  44.         }  
  45.     }  
  46.       
  47.     /// 当格外爆发时, 最少要被八个__except捕获, 否则C05  
  48.     /// 进不了对应的__finally  
  49.     /// 最外层的十一分捕获必得是__except, 如果是__finally  
  50.     /// 不然相当产生时, 会C05  
  51.     __except(puts("in filter"), 1)  
  52.     {  
  53.         puts("in except");  
  54.     }  
  55.   
  56.     puts("world");  
  57. }  

面试100题1-100

独自整理成文书档案

类与对象的要命 Cpp分外 #include #include using namespace std;//标志错误的品类class wrong {};int intdiv...

本文由澳门威利斯人发布于办公软件,转载请注明出处:类与对象的异常,被__finally捕获的异常

关键词: 澳门威利斯人 C++ RTL