亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:52003
  • 待審:43
  • 小程序:12
  • 文章:1047590
  • 會員:762

c++++ 成員函數(shù)中錯(cuò)誤處理機(jī)制有錯(cuò)誤碼、斷言及異常機(jī)制。錯(cuò)誤碼直接返回錯(cuò)誤值;斷言檢查假設(shè)條件,不成立則拋出異常;異常捕獲嚴(yán)重錯(cuò)誤,通過 try-catch 塊處理。實(shí)戰(zhàn)案例中,vector 類的 push_back() 函數(shù)在容量不足時(shí)拋出 std::bad_alloc 異常,使用者可通過 try-catch 捕獲并處理異常。

C++ 成員函數(shù)詳解:對象方法的錯(cuò)誤處理與異常機(jī)制

C++ 中的對象方法(成員函數(shù))對于處理復(fù)雜業(yè)務(wù)邏輯和錯(cuò)誤條件至關(guān)重要。本篇文章將深入探討成員函數(shù)中錯(cuò)誤處理和異常機(jī)制的用法,并提供實(shí)戰(zhàn)案例進(jìn)行說明。

錯(cuò)誤處理機(jī)制

錯(cuò)誤碼

最直接的錯(cuò)誤處理方法是使用錯(cuò)誤碼。錯(cuò)誤碼可以是整數(shù)或自定義枚舉值,表示特定錯(cuò)誤條件。在成員函數(shù)中,可以通過設(shè)置 errno 變量來返回錯(cuò)誤碼:

int MyFunction() {
  if (... /* 發(fā)生錯(cuò)誤 */) {
    errno = EINVAL; // 設(shè)置錯(cuò)誤碼為無效參數(shù)
    return -1; // 返回錯(cuò)誤指示符
  }
  // ... 其它代碼
}

登錄后復(fù)制

斷言

斷言用于檢查程序中的假設(shè)條件。如果條件不成立,則拋出一個(gè)異常(稍后討論)。在成員函數(shù)中,可以使用 assert() 宏來實(shí)現(xiàn)斷言:

void MyOtherFunction() {
  assert(ptr != nullptr); // 檢查指針是否為 nullptr
  // ... 其它代碼
}

登錄后復(fù)制

異常機(jī)制

異常是處理嚴(yán)重錯(cuò)誤條件的強(qiáng)大機(jī)制。異??梢詫?zhí)行從發(fā)生錯(cuò)誤的位置傳遞到指定的位置。在 C++ 中,異常的語法如下:

try {
  // 可能發(fā)生異常的代碼
} catch (exceptionType1& e) {
  // 處理 exceptionType1 類型異常
} catch (exceptionType2& e) {
  // 處理 exceptionType2 類型異常
} catch (...) {
  // 處理所有類型異常
}

登錄后復(fù)制

拋出異常

在成員函數(shù)中,可以通過使用 throw 關(guān)鍵字拋出異常。異常可以是標(biāo)準(zhǔn)庫中的 std::exception 及其子類,也可以是自定義異常類型:

void MyThrowingFunction() {
  if (... /* 發(fā)生嚴(yán)重錯(cuò)誤 */) {
    throw std::runtime_error("嚴(yán)重錯(cuò)誤!");
  }
  // ... 其它代碼
}

登錄后復(fù)制

捕獲異常

可以通過在成員函數(shù)的 try-catch 塊中捕獲異常。捕獲的異常對象可以通過引用傳遞給 catch 子句:

void MyCatchingFunction() {
  try {
    MyThrowingFunction();
  } catch (std::runtime_error& e) {
    // 處理 std::runtime_error 類型的異常
  } catch (...) {
    // 處理所有類型異常
  }
}

登錄后復(fù)制

實(shí)戰(zhàn)案例

假設(shè)有一個(gè) Vector 類,其中包含一個(gè)成員函數(shù) push_back(),該函數(shù)將元素添加到向量尾部。如果添加到向量的元素?cái)?shù)量超過了預(yù)分配的容量,則 push_back() 函數(shù)應(yīng)該拋出 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; // 使用標(biāo)準(zhǔn)庫的 std::vector 作為底層存儲
};

登錄后復(fù)制

在使用 Vector 類時(shí),可以如下方式捕獲 push_back() 函數(shù)拋出的異常:

int main() {
  Vector v;
  try {
    // 嘗試向向量添加過多元素,導(dǎo)致容量不足
    for (int i = 0; i < 1000000; i++) {
      v.push_back(i);
    }
  } catch (std::bad_alloc& e) {
    // 捕獲 std::bad_alloc 異常并處理
    std::cout << "錯(cuò)誤:容量不足!" << std::endl;
    return 1;
  }
  return 0;
}

登錄后復(fù)制

分享到:
標(biāo)簽:C++ 異常處理 成員函數(shù) 標(biāo)準(zhǔn)庫
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 52003

    網(wǎng)站

  • 12

    小程序

  • 1047590

    文章

  • 762

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定