C++ 與 物件導向 程式設計概念簡介 魏天君 d908301@oz.nthu.edu.tw 2019/5/3.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

計算機程式語言實習課.
四資二甲 第三週作業 物件導向程式設計.
11 繼承類別 11.4 建立者與破壞者 單一建立者與破壞者 11-20
Virtual Function Jing(井民全).
第11章 异常处理 11.1 异常处理概述 11.2 异常处理的基本思想 11.3 C++异常处理的实现 11.4 标准C++库中的异常类
Project 2 JMVC code tracing
Overloaded Functions 前言 處理多載函式宣告的規則 處理多載函式呼叫的規則 多載函式與 scope 函式呼叫的議決.
Chap 17 異常處理 目之與形,吾不知其異也,而盲者不能自見, 耳之與形,吾不知其異也,而聾者不能自聞; 心之與形,吾不知其異也,而狂者不能自得。 形之與形亦辟矣,而物或間之邪? 《莊子﹒雜篇 卷八上第二十三庚桑楚》 一個完整的程式即使遇到了異常狀況,也要可以正常結束。
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Ch11 JAVA的例外處理 物件導向程式設計(II).
Java簡介.
簡易C++除錯技巧 長庚大學機械系
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/11/24.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C語言簡介 日期 : 2018/12/2.
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Java语言程序设计 第五部分 Java异常处理.
Chapter 7 指標.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
第七章 檔案處理.
Java 程式設計 講師:FrankLin.
service-side: throw Exceptions client-side: try-and-catch
|12 結構與列舉型態.
程式設計實習課(四) ----C 函數運用----
Topic Introduction—RMI
第一單元 建立java 程式.
第 19 章 XML記憶體執行模式.
|07 函數.
第十章 指標.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Oop8 function函式.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
函數 博碩文化出版發行.
C qsort.
第二章 Java语法基础.
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
12 虛擬函數 12.1 多載與超載 12-2 多載函數 12-2 超載函數 虛擬函數 12-6 同名異式 12-7
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
適用於多選一 可減少if 與 else配對混淆的錯誤.
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 学习网站:
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
作業系統實習課(二) -Scheduler-Related System Calls-
Chapter 6 函數.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
13 繼承類別 13.1 繼承概論 基礎類別與衍生類別 繼承型式 13-2
Unix指令4-文字編輯與程式撰寫.
第五章 例外處理(Exception Handling)與Package
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

C++ 與 物件導向 程式設計概念簡介 魏天君 d908301@oz.nthu.edu.tw 2019/5/3

使用異常處理的優點 錯誤處理程式碼可以與引起錯誤的程式碼分開 在函式中發生錯誤時,可以回傳某種錯誤碼通知呼叫者,使呼叫者決定其最好的處理方式 2019/5/3

異常處理的語法 try { // Code that may throw exceptions } catch(exceptionType e1) // Code to handle the exception catch(exceptionTyp e2) 2019/5/3

異常處理的語法 try { if(test > 5) throw "test is greater than 5"; // This code will execute if the exception is not thrown } catch(const char *message) cout << message << endl; 2019/5/3

丟出及攔截異常 範例 7.1 丟出異常會立即從 try 區塊移轉出控制權 若無異常丟出,則沒有一個 catch 區塊會執行 catch 區塊的參數型別必需符合丟出的異常,此 catch 區塊才會執行 2019/5/3

丟出及攔截異常 丟出異常時會立即離開 try 區塊,此時會結束宣告在 try 區塊中的所有自動物件,所以不能丟出指向 try 區塊之區域物件的異常物件指標 try 丟出異常時,會複製異常物件,所以異常物件必需是可以複製的型態,具有 private copy constructor 的類別物件不能用於異常 2019/5/3

未處理的異常 若 try 區塊的任何 catch 區塊都沒有處理 try 區塊丟出的異常時,則會呼叫標準函式庫函式 terminate(),此函式呼叫已定義的預設結束處理函式,此函式再呼叫標準函式庫函式 abort() 可使用 set_terminate(),用自己的函式取代預設結束處理函式 2019/5/3

未處理的異常 設定自己的預設結束處理函式如下: void myHandler() { // Do something exit(1); } terminate_handler pOldHandler = set_terminate(myHandler); 2019/5/3

未處理的異常 void myHandler(); int main() { /* 一些程式碼 (以 terminate() 當結束處理函式) */ terminate_handler pOldHandler = set_terminate(myHandler); /* 一些程式碼 (以 myHandler() 當結束處理函式)*/ set_terminate(pOldHandler); } 2019/5/3

未處理的異常 set_terminate 的函式宣告是 terminate_handler set_terminate(terminate_handle); terminate_handle 定義在 exception 標準標頭檔 typedef void (*terminate_handler)(); 2019/5/3

引起異常的程式碼 在函式中丟出異常,若此函式未攔截此異常,則此異常會傳給上一層的呼叫函式;若此層的函式也沒有攔截異常,則會再傳給更上一層的呼叫函式,直至異常被 catch 為止。最後仍未被 catch 的異常會呼叫 terminate()。 因此在 try 區塊中的函式若有丟出異常,可被接下來的 catch 區塊處理。 2019/5/3

巢狀 try 區塊 try 區塊中可以有巢狀的 try & catch 區塊,若內層的 catch 無法攔截內層的異常時,外層的 catch 區塊可以攔截並處理之 範例 7.2 2019/5/3

作為異常的類別物件 你可以丟出任何種類的類別物件作為異常 範例 7.3 當丟出異常物件時,事件處理的順序是先複製物件 (產生暫存的物件),然後終結原始的物件,然後將副本傳遞給攔截處理程序。我們會希望是以參考值傳遞,必免複製再次發生 2019/5/3

Catch 處理程序和異常的匹配 當匹配參數 (被攔截) 型態和異常 (被丟出) 型態時,下面是匹配的條件 ‧參數型態和異常型態相同,不管 const ‧參數型態是異常類別型態的直接或間接基礎 類別,或是異常型態的直接或間接基礎類 別的參考值,忽略 const ‧異常和參數是指標,而且異常型態可自動轉 換為參數型態,忽略 const 2019/5/3

Catch 處理程序和異常的匹配 對應於上述的匹配規則,在同一類別的階層架構中,對於異常型態若有數個處理程序,則最後衍生的類別型態必需先出現,最基本的類別型態最後出現 範例 7.4 範例 7.5 (注意 catch 區塊的參數型別必需是參考值的原因) 2019/5/3

重新丟出異常 處理程序攔截異常時,它可以重新丟出此異常使外層 try 區塊的處理程序可以攔截之 重新丟出目前異常的敘述只包含關鍵字 throw,不需要丟出運算式 從內層 try 區塊重新丟出異常時,內層 try 區塊的其他處理程序不可以攔截之 重新丟出異常不會複製現有的異常物件 (範例 7.6 可說明此重要性) 2019/5/3

攔截所有的異常 可用刪節號 (3 個句點) 作為 catch 區塊的參數,攔截所有的異常 catch(...) { // Code to handle any exception } 範例 7.7 2019/5/3