VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

C++ Cơ Bản

Ngôn ngữ lập trình C++ là gì? Lịch sử của C++ Các tính năng của C++ Cài đặt môi trường lập trình C++ Chương trình C++ đầu tiên Biến trong C++ Các kiểu dữ liệu trong C++ Ép kiểu trong C++ Từ khóa trong C++ Các toán tử trong C++ Comment trong C++ Các hằng số trong C++ count, cin và endl trong C++ Ký tự đặc biệt trong C++ Namespace trong C++ Template trong C++ Modifier trong C/C++

Câu Lệnh Điều Khiển C++

Mệnh đề if-else Mệnh đề switch Vòng lặp for Vòng lặp while Vòng lặp do-while Lệnh Break Lệnh Continue Lệnh Goto

C++ Function

Hàm trong C++ Hàm do người dùng định nghĩa Các kiểu hàm trong C++ Đệ quy trong C++ Call by value Call by reference

C++ Array

Mảng (array) trong C++ Mảng 2 chiều trong C++ Truyền mảng vào hàm

C++ Poiter

Con trỏ trong C++ Con trỏ Null trong C++ Con trỏ số học trong C++ Con trỏ và mảng trong C++ Mảng con trỏ trong C++ Con trỏ tới con trỏ trong C++ Truyền con trỏ tới hàm trong C++ Trả về con trỏ từ hàm trong C++

C++ Lớp Object

Khái niệm lập trình hướng đối tượng trong C++ Lớp và đối tượng trong C++ Constructor trong C++ Destructor trong C++ this trong C++ static trong C++ struct trong C++ Enumeration trong C++ Hàm Friend trong C++ Hàm Math trong C++ Tính kế thừa trong C++ Tính đa hình trong C++ Tính trừu tượng trong C++ Tính đóng gói trong C++ Interface trong C++

Nạp Chồng Toán Tử

Nạp chồng toán tử và Nạp chồng hàm trong C++ Nạp chồng toán tử một ngôi trong C++ Nạp chồng toán tử nhị phân trong C++ Nạp chồng toán tử quan hệ trong C++ Nạp chồng toán tử Input/Output trong C++ Nạp chồng toán tử ++ và -- trong C++ Nạp chồng toán tử gán trong C++ Nạp chồng toán tử gọi hàm () trong C++ Nạp chồng toán tử subscript [] trong C++ Nạp chồng toán tử truy cập thành viên lớp (->) trong C++

Lập Trình C++

Xử lý ngoại lệ trong C++ Đa luồng trong C++
Bài Tập C++ Có Lời Giải
1 / 3
❮ ❯

Xử lý ngoại lệ trong C++


Nạp chồng toán tử truy cập thành viên lớp (->) trong C++
Đa luồng trong C++

Nội dung chính

  • Xử lý ngoại lệ (Exception Handling) trong C++
  • Ném (throw) Exception trong C++
  • Bắt (catch) Exception trong C++
  • Standard Exception trong C++
  • Định nghĩa Exception mới trong C++

Xử lý ngoại lệ (Exception Handling) trong C++

Một Exception (ngoại lệ) là một vấn đề xuất hiện trong khi thực thi một chương trình, làm gián đoạn chương trình. Một Exception trong C++ là một phản hồi về một tình huống ngoại lệ mà xuất hiện trong khi một chương trình đang chạy, ví dụ như chia cho số 0.

Exception cung cấp một cách để truyền điều khiển từ một phần của một chương trình tới phần khác. Exception Handling (Xử lý ngoại lệ) trong C++ được xây dựng dựa trên 3 từ khóa là: try, catch, và throw.

  • throw: Một chương trình ném một Exception khi một vấn đề xuất hiện. Việc này được thực hiện bởi sử dụng từ khóa throw trong C++.

  • catch: Một chương trình bắt một Exception với một Exception Handler tại vị trí trong một chương trình nơi bạn muốn xử lý vấn đề đó. Từ khóa catch trong C++ chỉ dẫn việc bắt một exception.

  • try: Một khối try có thể được bắt bởi một số lượng cụ thể exception. Nó được theo sau bởi một hoặc nhiều khối catch.

Giả sử một khối sẽ tạo một Exeption, một phương thức bắt một exception bởi sử dụng kết hợp các từ khóa try và catch. Một khối try/catch được đặt xung quanh code mà có thể tạo một exception. Code bên trong một khối try/catch được xem như là code được bảo vệ, và cú pháp để sử dụng try/catch trong C++ như sau:


try
{
   // phan code duoc bao ve
}catch( ten_Exception e1 )
{
   // day la khoi catch
}catch( ten_Exception e2 )
{
   // day la khoi catch
}catch( ten_Exception eN )
{
   // day la khoi catch
}

Bạn có thể liệt kê nhiều lệnh catch để bắt các kiểu exception khác nhau trong trường hợp khối try của bạn xuất hiện nhiều hơn một exception trong các tình huống khác nhau.


Ném (throw) Exception trong C++

Exception có thể bị ném ở bất cứ đâu bên trong một khối code bởi sử dụng các lệnh throw trong C++. Toán hạng của lệnh throw quyết định kiểu cho exception và có thể là bất kỳ biểu thức nào và kiểu kết quả của biểu thức quyết định kiểu của exception bị ném.

Ví dụ sau minh họa việc ném một exception khi chia cho số 0 trong C++:


double chia(int a, int b)
{
   if( b == 0 )
   {
      throw "Chu y: Ban dang chi cho so 0!!!";
   }
   return (a/b);
}

Bắt (catch) Exception trong C++

Khối catch theo sau khối try trong C++ sẽ bắt bất kỳ exception nào. Bạn có thể xác định kiểu của exception bạn muốn bắt và điều này được xác định bởi khai báo exception mà xuất hiện trong các dấu ngoặc đơn theo sau từ khóa catch trong C++.


try
{
   // phan code duoc bao ve
} catch( ten_Exception e )
{
  // phan code de xu ly ngoai le co ten la ten_Exception
}

Code trên sẽ bắt một exception có kiểu là ten_Exception. Nếu bạn muốn xác định rằng một khối catch nến xử lý bất kỳ kiểu exception nào bị ném trong một khối try, bạn phải đặt một dấu ba chấm (…) trong các dấu ngoặc đơn theo sau từ khóa catch, như sau:


try
{
   // phan code duoc bao ve
} catch(...)
{
  // phan code de xu ly bat ky kieu ngoai le nao
}

Ví dụ sau ném một exception khi chia cho số 0 và chúng ta bắt nó trong khối catch.


#include <iostream>
using namespace std;
double chia(int a, int b)
{
   if( b == 0 )
   {
      throw "Chu y: Ban dang chi cho so 0!";
   }
   return (a/b);
}int main ()
{
   int x = 15;
   int y = 0;
   double z = 0;
 
   try {
     z = chia(x, y);
     cout << z << endl;
   }catch (const char* msg) {
     cerr << msg << endl;
   }   return 0;
}

Bởi vì chúng ta đang tạo một exception có kiểu const char*, vì thế trong khi bắt exception này, chúng ta phải sử dụng const char* trong khối catch.

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Xử lý ngoại lệ (Exception Handling) trong C++

Standard Exception trong C++

C++ cung cấp một danh sách các Standard Exception được định nghĩa trong mà chúng ta có thể sử dụng trong các chương trình. Những exception này được sắp xếp theo cấu trúc thứ tự cha-con như sau:

Xử lý ngoại lệ (Exception Handling) trong C++

Bảng dưới là miêu tả ngắn gọn về mỗi exception được đề cập trong sơ đồ trên:

Exception Mô tả
std::exception Một exception và lớp cha của tất cả Standard Exception trong C++
std::bad_alloc Có thể được ném bởi new
std::bad_cast Có thể được ném bởi dynamic_cast
std::bad_exception Đây là thiết bị hữu ích để xử lý Unexpected Exception trong một chương trình C++
std::bad_typeid Có thể được ném bởi typeid
std::logic_error Một exception mà theo lý thuyết có thể được phát hiện bởi việc đọc code
std::domain_error Đây là một exception được ném khi một miền toán học không hợp lệ được sử dụng
std::invalid_argument Được ném do các tham số không hợp lệ
std::length_error Được ném khi một std::string quá lớn được tạo ra
std::out_of_range Có thể được ném bởi một phương thức, ví dụ std::vector và std::bitset<>::operator[]().
std::runtime_error Một exception mà theo lý thuyết không thể được phát hiện bởi việc đọc code
std::overflow_error Được ném nếu một sự tràn luồng toán học (mathematical overflow) xuất hiện
std::range_error Xuất hiện khi bạn cố gắng lưu giữ một giá trị bên ngoài dãy giá trị
std::underflow_error Được ném nếu một mathematical underflow (sự tràn dưới) xuất hiện

Định nghĩa Exception mới trong C++

Bạn có thể định nghĩa các exception cho riêng bạn bằng việc kế thừa và ghi đè tính năng lớp exception trong C++. Ví dụ sau minh họa cách bạn có thể sử dụng lớp std::exception để triển khai exception của riêng bạn theo một cách chuẩn trong C++:


#include <iostream>
#include <exception>
using namespace std;struct MyException : public exception
{
  const char * what () const throw ()
  {
    return "Exception trong C++";
  }
};
 
int main()
{
  try
  {
    throw MyException();
  }
  catch(MyException& e)
  {
    std::cout << "MyException da duoc bat!" << std::endl;
    std::cout << e.what() << std::endl;
  }
  catch(std::exception& e)
  {
    // phan nay danh cho cac error khac
  }
}

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Xử lý ngoại lệ (Exception Handling) trong C++

Ở đây, what() là một phương thức public được cung cấp bởi lớp exception trong C++ và nó đã được ghi đè bởi tất cả các lớp exception con. Ví dụ này trả về nguyên nhân của một exception trong C++.


Nạp chồng toán tử truy cập thành viên lớp (->) trong C++
Đa luồng trong C++

Recent Updates

Đa luồng trong C++Xử lý ngoại lệ trong C++Nạp chồng toán tử truy cập thành viên lớp (->) trong C++Nạp chồng toán tử subscript [] trong C++Nạp chồng toán tử gọi hàm () trong C++Nạp chồng toán tử gán trong C++Nạp chồng toán tử ++ và -- trong C++Nạp chồng toán tử Input/Output trong C++Nạp chồng toán tử quan hệ trong C++Nạp chồng toán tử nhị phân trong C++Nạp chồng toán tử một ngôi trong C++Nạp chồng toán tử và Nạp chồng hàm trong C++Sắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml