c++中的異常---2(異常接口聲明,異常變量的生命周期,異常的多態使用)

異常接口聲明

  1. 為了加強程序的可讀性,可以在函數聲明中列出可能拋出異常的所有類型,例如:void func() throw(A,B,C);這個函數func能夠且只能拋出類型A,B,C及其子類的異常
  2. 如果在函數聲明中沒有包含異常接口聲明,則此函數可以拋任何類型的異常,例如:void func()
  3. 一個不拋任何類型異常的函數聲明為:void func() throw()
  4. 如果一個函數拋出了它的異常接口聲明所不允許拋出的異常unexcepted函數會被調用,該函數默認行為調用terminate函數中斷程序
  5. 如果想拋出特定的類型異常,可以利用異常的接口聲明。
  6. void func() throw()//throw(int)只能拋出int類型的異常 throw()不拋出任何類型的異常

異常變量的生命周期

  1. throw的異常是有類型的,可以是數字,字符串,類對象

  2. throw的異常是有類型的,catch需嚴格匹配異常類型

  3. 如果MyException e,會多開銷一份數據,調用拷貝構造

  4. 如果MyException *e,不會提前釋放對象new自己管理delete

  5. 推薦MyException &e容易些,而且就一分數據

     #include<iostream>using namespace std;class myException{public:myException(){cout << "myException的默認構造" << endl;}myException(const myException&e){cout << "myException的拷貝構造" << endl;}~myException(){cout << "myException的析構調用" << endl;}void prtintError(){m_A = 100;cout << "error" <<this->m_A << endl;}int m_A;};void doWork(){throw & myException();}void test01(){try{doWork();}catch (myException *e)//myException e會多開銷一份數據{//e->prtintError();//e->prtintError();//e->prtintError();//指向非法內存空間,不應該這么做cout << "捕獲異常" << endl;//delete e; //靠自覺釋放對象}}int  main(){test01();system("pause");return 0;}
    

異常的多態使用

  1. 利用多態來實現printError同一個接口的調用

  2. 拋出不同的錯誤對象

     #include<iostream>using namespace std;//異常基類class BaseException{public:virtual void printError(){}};class NullPointerException : public BaseException{public:virtual void printError(){cout << "空指針異常" << endl;}};class OutofRangeExcrption : public BaseException{public:virtual void printError(){cout << "越界異常" << endl;}};void doWork(){//throw..//throw NullPointerException();throw OutofRangeExcrption();}void test01(){try{doWork();}catch (BaseException  &e){e.printError();}}int main(){test01();system("pause");return 0;}
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383287.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++中的異常---3(系統標準異常庫,編寫自己異常類)

系統標準異常庫 #incldue out_of_range 等… #include<iostream>#include<string>using namespace std;//系統提供標準異常#include<stdexcept>class Person{public:Person(string name, int age){this->m_Name name;//年齡做檢測if (age<0 || age&g…

H.264中IDR幀和I幀區別

IDR&#xff08;Instantaneous Decoding Refresh&#xff09;--即時解碼刷新。I和IDR幀都是使用幀內預測的。它們都是同一個東西而已,在編碼和解碼中為了方便&#xff0c;要首個I幀和其他I幀區別開&#xff0c;所以才把第一個首個I幀叫IDR&#xff0c;這樣就方便控制編碼和解碼…

c++中的IO流(流的概念和流類庫的結構,標準的輸入輸出流)

流的概念和流類庫的結構 程序的輸入指的是從輸入文件將數據傳送給程序&#xff0c;程序的輸出指的是從程序將數據傳送給輸出文件 c輸入輸出包含以下三個方面的內容 對系統指定的標準設備的輸入輸出。即從鍵盤輸入數據&#xff0c;輸出到顯示器屏幕&#xff0c;這種輸入輸出稱…

MTD應用學習札記

今天做升級方案用到了mtd-utils中的flash_eraseall和flash_cp兩個工具&#xff0c;在進行方案驗證的時候&#xff0c;遭遇到各種不解和疑惑&#xff0c;因對MTD的原理不熟悉&#xff0c;所以只能多次嘗試&#xff0c;雖然最后把方案搞定了&#xff0c;不過覺得MTD中的mtd和mtdb…

c++中的文件讀寫的操作

寫文件 ofstreamopen指定打開方式isopen判斷是否打開成功ifs<<“數據”ofs.close&#xff08;&#xff09; 讀文件 ifstream ifs 指定打開方式ios::in isopen判斷是否打開成功 讀取有三種方式 #include<iostream>using namespace std;//文件讀寫頭文件#incl…

udhcpc命令

由于要使用網絡通訊&#xff0c;所以不可避免的要用到dhcp。理想的網絡通訊方式是下面3種都要支持: 1,接入已有網絡。這便要求可以作為dhcp客戶端。 2,作為DHCP服務器&#xff0c;動態分配IP。 3,指定固定IP 第3種情況沒有什么好說的&#xff0c;簡單說下前2種情況。 使用步驟&…

c++的STL--1概念通述

STL的概念 什么是STL? STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且 是一個包羅數據結構與算法的軟件框架。 STL從廣義上分為&#xff1a;容器(container)&#xff0c;算法(algorit…

socket通信和異常處理札記

Linux socket通信出現CLOSE_WAIT狀態的原因與解決方法 這個問題之前沒有怎么留意過&#xff0c;是最近在面試過程中遇到的一個問題&#xff0c;面了兩家公司&#xff0c;兩家公司竟然都面到到了這個問題&#xff0c;不得不使我開始關注這個問題。說起CLOSE_WAIT狀態&#xff0c…

mac 下使用wireshark監聽網絡上的數據

分三個步驟&#xff1a; 1.wireshark安裝 wireshark運行需要mac上安裝X11&#xff0c;mac 10.8的系統上默認是沒有X11的。先去http://xquartz.macosforge.org/landing/下載最新的 xquartz安裝&#xff0c;安裝好就有X11了。 wireshark的下載&#xff0c;網…

c++的vector容器

vector容器概念 vector是表示可變大小數組的序列容器。就像數組一樣&#xff0c;vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素 進行訪問&#xff0c;和數組一樣高效。但是又不像數組&#xff0c;它的大小是可以動態改變的&#xff0c;而且它…

嵌入式Linux下3G USB Modem的使用

busybox中需打開&#xff1a;wc&#xff0c;pidof&#xff1b; busybox中shell下打開getopts 百度搜索“Serial connection established. using channel 1”包含大量問題解答 2013-12-22 0個評論 收藏 我要投稿 一.ARM-Linux ARM-Linux-2.6.17 3G USB Modem:hu…

新一代數據庫技術

新一代非關系型數據庫有以下5個主要類型&#xff1a; 面向文件存儲&#xff1a;適用于存儲海量文件&#xff0c;代表產品MongoDb 列存儲(wide column store/column-family)數據庫&#xff1a;快速查找相關數據&#xff0c;相關數據被放在同一列中&#xff0c;代表產品Cassandra…

c++中stack容器

Stack 簡介 stack 是堆棧容器&#xff0c;是一種“先進后出”的容器。stack 是簡單地裝飾 deque 容器而成為另外的一種容器。#include stack沒有迭代器 Stack所有元素的進出都必須符合“先進后出”的條件&#xff0c;只有stack頂端的元素&#xff0c;才有機會被外界取用&am…

詳解udev

如果你使用Linux比較長時間了&#xff0c;那你就知道&#xff0c;在對待設備文件這塊&#xff0c;Linux改變了幾次策略。在Linux早期&#xff0c;設備文件僅僅是是一些帶有適當的屬性集的普通文件&#xff0c;它由mknod命令創建&#xff0c;文件存放在/dev目錄下。后來&#xf…

c++中的queue容器

queue容器 隊列是一種容器適配器&#xff0c;專門用于在FIFO上下文(先進先出)中操作&#xff0c;其中從容器一端插入元素&#xff0c;另一端 提取元素。 隊列作為容器適配器實現&#xff0c;容器適配器即將特定容器類封裝作為其底層容器類&#xff0c;queue提供一組特定的 成員…

NAU8810相關問題

1.ADC和DAC有什么區別&#xff1f; 不&#xff0c;這不是一個“愚弄人的”問題或腦筋急轉彎&#xff0c;并且我認為我們的讀者都非常清楚模數轉換器(ADC)及數模轉換器(DAC)的基本功能。 但在如何使用這些轉換器以及人們的認知度上也存在著哲理性區別。用最簡單的話講&#xff0…

c++中list容器

list概念 list是可以在常數范圍內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代。list的底層是雙向鏈表結構&#xff0c;雙向鏈表中每個元素存儲在互不相關的獨立節點中&#xff0c;在節點中通過指針指向 其前一個元素和后一個元素。list與for…

Linux中rc的含義

在Linux中&#xff0c;最為常用的縮略語也許是“rc”&#xff0c;它是“runcomm”的縮寫――即名詞“run command”(運行命令)的簡寫。rc”是任何腳本類文件的后綴&#xff0c;這些腳本通常在程序的啟動階段被調用&#xff0c;通常是Linux系統啟動時。如/etc/rc&#xff08;連接…

c++中的set容器和multiset容器

set容器基本概念 set的特性是&#xff0c;所有元素都會根據元素的鍵值自動被排序。set的元素不像map那樣可以同時擁有實值和鍵值&#xff0c;set的元素即是鍵值又是實值。set不允許兩個元素又相同的鍵值。我們不可以通過set的迭代器改變set元素的值&#xff0c;因為set元素值就…

linux下的僵尸進程處理SIGCHLD信號

什么是僵尸進程&#xff1f; 首先內核會釋放終止進程(調用了exit系統調用)所使用的所有存儲區&#xff0c;關閉所有打開的文件等&#xff0c;但內核為每一個終止子進程保存了一定量的信息。這些信息至少包括進程ID&#xff0c;進程的終止狀態&#xff0c;以及該進程使用的CPU時…