C 成員函數中錯誤處理機制有錯誤碼、斷言及異常機制。錯誤碼直接傳回錯誤值;斷言檢查假設條件,不成立則拋出異常;異常捕獲嚴重錯誤,透過 try-catch 區塊處理。在實戰案例中,Vector 類別的 push_back() 函數在容量不足時拋出 std::bad_alloc 異常,使用者可透過 try-catch 捕獲並處理異常。
C 中的物件方法(成員函數)對於處理複雜業務邏輯和錯誤條件至關重要。本篇文章將深入探討成員函數中錯誤處理和異常機制的用法,並提供實戰案例進行說明。
最直接的錯誤處理方法是使用錯誤碼。錯誤碼可以是整數或自訂枚舉值,表示特定錯誤條件。在成員函數中,可以透過設定 errno
變數來傳回錯誤碼:
int MyFunction() { if (... /* 发生错误 */) { errno = EINVAL; // 设置错误码为无效参数 return -1; // 返回错误指示符 } // ... 其它代码 }
斷言用於檢查程式中的假設條件。如果條件不成立,則拋出一個異常(稍後討論)。在成員函數中,可以使用 assert()
巨集來實作斷言:
void MyOtherFunction() { assert(ptr != nullptr); // 检查指针是否为 nullptr // ... 其它代码 }
#異常是處理嚴重錯誤條件的強大機制。異常可以將執行從發生錯誤的位置傳遞到指定的位置。在 C 中,異常的語法如下:
try { // 可能发生异常的代码 } catch (exceptionType1& e) { // 处理 exceptionType1 类型异常 } catch (exceptionType2& e) { // 处理 exceptionType2 类型异常 } catch (...) { // 处理所有类型异常 }
在成員函數中,可以透過使用 throw
關鍵字拋出例外。異常可以是標準庫中的std::exception
及其子類,也可以是自訂例外類型:
void MyThrowingFunction() { if (... /* 发生严重错误 */) { throw std::runtime_error("严重错误!"); } // ... 其它代码 }
#可以透過在成員函數的try-catch
區塊中捕獲異常。捕獲的異常物件可以透過引用傳遞給catch
子句:
void MyCatchingFunction() { try { MyThrowingFunction(); } catch (std::runtime_error& e) { // 处理 std::runtime_error 类型的异常 } catch (...) { // 处理所有类型异常 } }
假設有一個Vector
類,其中包含一個成員函數push_back()
,該函數將元素加入向量尾部。如果加入向量的元素數量超過了預先分配的容量,則 push_back()
函數應該拋出 std::bad_alloc
例外。
class Vector { public: void push_back(int element) { try { // 尝试添加元素 // 如果容量不足,会抛出 std::bad_alloc 异常 elements.push_back(element); } catch (std::bad_alloc& e) { // 捕获并重新抛出 std::bad_alloc 异常 throw; } } private: std::vector<int> elements; // 使用标准库的 std::vector 作为底层存储 };
在使用 Vector
類別時,可以如下方式捕獲 push_back()
函數拋出的例外:
int main() { Vector v; try { // 尝试向向量添加过多元素,导致容量不足 for (int i = 0; i < 1000000; i++) { v.push_back(i); } } catch (std::bad_alloc& e) { // 捕获 std::bad_alloc 异常并处理 std::cout << "错误:容量不足!" << std::endl; return 1; } return 0; }
以上是C++ 成員函數詳解:物件方法的錯誤處理與異常機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!