物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3

Slides:



Advertisements
Similar presentations
變數與函數 大綱 : 對應關係 函數 函數值 顧震宇 台灣數位學習科技股份有限公司. 對應關係 蛋餅飯糰土司漢堡咖啡奶茶 25 元 30 元 25 元 35 元 25 元 20 元 顧震宇 老師 台灣數位學習科技股份有限公司 變數與函數 下表是早餐店價格表的一部分: 蛋餅 飯糰 土司 漢堡 咖啡 奶茶.
Advertisements

第一單元 建立java 程式.
大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)
第13章 物件導向與例外處理 13-1 物件導向的基礎 13-2 類別與物件 13-3 類別的繼承 13-4 PHP的例外處理
06 類別與物件. 06 類別與物件 6.1 類別與物件 目前的程式設計主流是物件導向 (OOP),Visual C# 已提供完整的物件導向功能。在物件導向設計裡,物件可以被封裝 ( 保護) 和繼承 ( 重複使用)。因為物件的封裝會使物件受到保護,要存取物件必須透過屬性 (Property)、方法.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
11 繼承類別 11.4 建立者與破壞者 單一建立者與破壞者 11-20
C++入門 以Dev C++為例.
第11章 C語言到C++語言 11-1 物件導向程式設計 11-2 青出於藍的C C++的函數特殊功能 11-4 認識類別
第十一章 繼承類別和朋友關係.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
第十一章 結構.
Java簡介.
JAVA 程式設計與資料結構 第七章 繼承與Interface.
Ch05 繼承 Java程式設計入門(2).
Managing Inheritance Lecturer:曾學文.
列舉(enum).
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Managing Inheritance Lecturer:楊昌樺.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
安裝JDK 安裝Eclipse Eclipse 中文化
程式設計(二) 進階類別 郭文真 Sabrina Kuo.
Visual Basic 物件導向程式設計簡介.
第七章 檔案處理.
繼承概念的優點 類別再使用(程式碼再使用) 抽象化概念再使用 類別關係階層化.
Java 程式設計 講師:FrankLin.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
建立一 function s (type) 可以用來繪製cyclic-harmonic curves
Ch20. 計算器 (Mac 版本).
INDEX 資訊學科種子教師研習 課程說明 教學活動計畫.
第 19 章 XML記憶體執行模式.
|07 函數.
精彩Java 2程式設計 <吳逸賢、吳目誠 編著>
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
CH1 我的第一個App與變數宣告.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
物件導向系統分析與設計 CH04 物件導向開發方法.
GUI Title and GUI Status
挑戰C++程式語言 ──第8章 進一步談字元與字串
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
12 虛擬函數 12.1 多載與超載 12-2 多載函數 12-2 超載函數 虛擬函數 12-6 同名異式 12-7
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
JAVA 程式設計與資料結構 第三章 物件的設計.
4-1 變數與函數 第4章 一次函數及其圖形.
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
Object-Oriented Programming
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
13 繼承類別 13.1 繼承概論 基礎類別與衍生類別 繼承型式 13-2
Unix指令4-文字編輯與程式撰寫.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3 物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3. 施威銘研究室著,最新 Java 2 程式語言 第 2 版,旗標出版社。 1.由 C++ 進入 Java 程式語言(I): C++ 之類別繼承 Chih-Hung Wang

基底類別與衍生類別 (1/2) 以既有類別為基礎,進而衍生出另一類別,稱為 「類別的繼承」(inheritance of classes) 原有的類別稱為「父類別」(super class)或「基 底類別」(basis class) 因繼承而產生的新類別則稱為「子類別(sub class) 或「衍生類別」(derived class)

基底類別與衍生類別 (2/2) 類別成員繼承的關係

簡單的繼承範例 (1/6) 類別繼承的格式

簡單的繼承範例 (2/6) 下面的範例簡單說明繼承的使用方法

簡單的繼承範例 (3/6) 下圖是本例中,父類別與子類別所佔記憶體之比較

簡單的繼承範例 (4/6)

簡單的繼承範例 (5/6) 本例的繼承關係圖繪製如下

簡單的繼承範例 (6/6) 由前一個範例可學到下列幾點重要的觀念 透過類別的繼承,可將父類別的成員繼承給子類別 在執行子類別的建構元之前,會先自動呼叫父類別中沒有引 數的建構元 子類別物件所佔的位元組,等於自己資料成員所佔的位元組, 加上繼承過來之成員所佔用的位元組

呼叫父類別中特定的建構元 (1/4) 下面是呼叫父類別CWin裡特定建構元的範例

呼叫父類別中特定的建構元 (2/4)

呼叫父類別中特定的建構元 (3/4)

呼叫父類別中特定的建構元 (4/4) 這裡有很重要的兩點要提醒讀者: 如果省略34行的敘述,則父類別中沒有引數的建構元還是會 被呼叫。 呼叫父類別中特定的建構元,其敘述必須寫在子類別建構元 第一行的後面,並以「:」連接,不能置於它處

Practice 1 請試著完成下列程式設計 設計一個父類別 Caaa,內涵兩個 public 整數成員 num1 及 num2 設計一個子類別 Cbbb,繼承至 Caaa,並加入 set_num() 函數,用來設定從父類別繼承而來的成員 num1 及 num2。 再設計一個 show() 函數,用來顯示 num1 及 num2 的值。 在主程式 main() 裡宣告 Cbbb 類別的變數 obj,利用 set_num() 函數將 num1 的值設為 10,num2 的值設為 20, 在以 show() 印出成員的值。

使用建構元常見的錯誤 (1/3) 下面是呼叫父類別建構元時常犯的錯誤範例

使用建構元常見的錯誤 (2/3)

使用建構元常見的錯誤 (3/3) 下面的程式是修正 prog16_3的錯誤

父類別裡私有成員的存取 (1/4) 錯誤的例子--存取到父類別裡的私有成員

父類別裡私有成員的存取 (2/4)

父類別裡私有成員的存取 (3/4) 修正prog16_5的錯誤

父類別裡私有成員的存取 (4/4)

使用protected成員 (1/2) 把成員宣告成protected最大的好處是兼顧到成員的安 全性與便利性(繼承子類別可直接取用) 下面的範例是prog16_5的小改版

使用protected成員 (2/2)

類別繼承的存取模式 下圖說明類別繼承的存取模式

Practice 2 參考課本 16-33 習題 11

Practice 3 (1) 汽車繼承練習 一個汽車的基本類別如下 class car { protected: int num_doors; public: car(); car(int d): num_doors(d) {} }; 其中 car() 為預設汽車為 4 門房車,car(int d) 可填入房車門數

Practice 3 (2) 兩個繼承的類別 Mercedes 為 4 門房車,增加一個 private data 為汽車價格,增加 一個 public function 為輸出汽車相關資料(車門數、價格) TIIDA 為 4 或5 門房車,需要透過car(int d): num_doors(d) {} 來設 定。增加一個 private data 為汽車價格,增加一個 public function 為輸出汽車相關資料(車門數、價格) 主程式有兩個物件,分別為 Mercedes 及 TIIDA 車種,其中 TIIDA 車物件需要輸入門數。呼叫相關函數以輸出汽車之 資料。

多載與改寫 「多載」是函數名稱相同,在不同的場合可做不同的事 「改寫」是在子類別裡定義與父類別名稱相同的函數, 用來覆蓋父類別裡函數功能的一種技術

改寫的範例 (1/2) 簡單的改寫範例

改寫的範例 (2/2)

「改寫」與「多載」的比較 「多載」:英文名稱為overloading 「改寫」:英文名稱為overriding 它是在相同類別內,定義名稱相同,但引數個數或型態不同 的函數,C++可依據引數的個數或型態,呼叫相對應的函數 「改寫」:英文名稱為overriding 它是在子類別當中,定義名稱、引數個數與型態均與父類別 相同的函數,用以改寫父類別裡函數的功用

Practice 4 參考 Practice 1 試在父類別 Caaa 加入一個 display() 函數,可以顯示 “Printed from Caaa class” 在子類別加入 display() 函數,用來改寫父類別之函數,顯 示 “Printed from Cbbb class” 在主程式 main() 中宣告 Caaa 物件 obj1,Cbbb 物件 obj2, 利用這兩個物件呼叫 display() 函數。

錯誤的使用拷貝建構元 (1/6) 如果父類別或子類別裡沒有提供拷貝建構元的話,編 譯器會提供一個預設的拷貝建構元 下面是一個因沒有撰寫拷貝建構元而發生錯誤的例子

錯誤的使用拷貝建構元 (2/6)

錯誤的使用拷貝建構元 (3/6)

錯誤的使用拷貝建構元 (4/6)

錯誤的使用拷貝建構元 (5/6) 下圖為執行完60行後的結果 下圖為執行完61行後的結果

錯誤的使用拷貝建構元 (6/6) 要解上面的錯誤,只要在子類別內加上一個拷貝建構元

修正錯誤 (1/5) 下面的程式是修正沒有 撰寫拷貝建構元的錯誤

修正錯誤 (2/5)

修正錯誤 (3/5)

修正錯誤 (4/5)

修正錯誤 (5/5) 下圖為執行47與53行後之結果

建構元與解構元的呼叫時機 建立物件時,父類別的建構元會先被執行,然後再執 行子類別的建構元 銷毀物件時,子類別的解構元會先被執行,然後再執 行父類別的解構元