Tải bản đầy đủ (.ppt) (9 trang)

video cá sấu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (33.55 KB, 9 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1></div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Ngoại lệ (Exception)



Exception gồm:



Mơ tả lỗi có thể xảy ra.



Đoạn mã lệnh trong đó xảy ra exception,



nằm trong khối try{}



Những thứ gây ra exception nằm trong



lệnh throw



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Ví dụ



Trong ví dụ về stack, lỗi có thể xảy ra



khi:



Đẩy nhiều phần tử vào stack


Lấy phần tử ra khỏi stack rỗng



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Ví dụ …



#include <stdlib.h>


#include <iostream.h>



const int STACK_SIZE = 100;


class stack {




protected:



int count;


private:



int data[STACK_SIZE];


public:



stack(void);



void push(const int item);


int pop(void);



</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

Ví dụ …



inline stack::stack(void)



{



count = 0;


}



inline void stack::push(const int item)


{



data[count] = item;


count++;



}




inline int stack::pop(void)


{



count--;



</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

Ví dụ …



const int WHAT_MAX = 80;


class bound_err {



public:



char what[WHAT_MAX];


bound_err(char *_what) {



if (strlen(_what) < (WHAT_MAX -1))


strcpy(what, _what);



else



strcpy(what, "Internal error: _what is too long");


}



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

Ví dụ …



class b_stack: public stack {


public:



void push(const int item) throw(bound_err);


int pop(void) throw(bound_err);




</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

Ví dụ …



inline void b_stack::push(const int item) throw(bound_err)


{



if (count >= STACK_SIZE)


{



bound_err overflow("Push overflows stack");


throw overflow;



}



stack::push(item);


}



inline int b_stack::pop(void) throw(bound_err)


{



if (count <= 0)


{



throw bound_err("Pop causes stack underflow");


}



</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

Ví dụ …



b_stack test_stack;
void push_a_lot(void) {



for (int i = 0; i < 5000; i++)
test_stack.push(i);
}
main ()
{
try
{
push_a_lot();
}


catch (bound_err &err)
{


cout << "Error: Bounds exceeded\n";
cout << "Reason: " << err.what << '\n';
exit (8);


}


catch (...)
{


cout << "Error: Unexpected exception occurred\n";
exit (8);


}


</div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×