Lâpk trình
Chia sẻ bởi Đặng Anh Tuấn |
Ngày 29/04/2019 |
55
Chia sẻ tài liệu: lâpk trình thuộc Tin học 9
Nội dung tài liệu:
Chương 10: Bắt ngoại lệ
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
Mã lệnh bắt lỗi trong catch
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
Lỗi có thể xảy ra là dạng out-of-bound
Ví dụ …
#include
#include
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);
};
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--;
return (data[count]);
}
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");
}
};
Ví dụ …
class b_stack: public stack {
public:
void push(const int item) throw(bound_err);
int pop(void) throw(bound_err);
};
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");
}
return (stack::pop());
}
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 ";
cout << "Reason: " << err.what << ` `;
exit (8);
}
catch (...)
{
cout << "Error: Unexpected exception occurred ";
exit (8);
}
return (0);
}
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
Mã lệnh bắt lỗi trong catch
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
Lỗi có thể xảy ra là dạng out-of-bound
Ví dụ …
#include
#include
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);
};
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--;
return (data[count]);
}
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");
}
};
Ví dụ …
class b_stack: public stack {
public:
void push(const int item) throw(bound_err);
int pop(void) throw(bound_err);
};
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");
}
return (stack::pop());
}
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 ";
cout << "Reason: " << err.what << ` `;
exit (8);
}
catch (...)
{
cout << "Error: Unexpected exception occurred ";
exit (8);
}
return (0);
}
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Đặng Anh Tuấn
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)