挑戰C++程式語言 ─第13章 運算子的覆載.

Slides:



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

計算機程式語言實習課.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
C++入門 以Dev C++為例.
第11章 C語言到C++語言 11-1 物件導向程式設計 11-2 青出於藍的C C++的函數特殊功能 11-4 認識類別
資料結構使用Java 第1章 資料結構與Java程式複習.
Chapter 5 遞迴 資料結構導論 - C語言實作.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
簡易C++除錯技巧 長庚大學機械系
2-3 基本數位邏輯處理※.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
【變數與記憶體位址】 變數(Variable)提供一個有名稱的記憶體儲存空間。一個變數包含資料型態、變數本身的值及它的位址值。
保留字與識別字.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/11/24.
Java程式概觀.
Class(二) Overloaded Operators User-Defined Conversions 前言 超載運算子
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Chapter 7 指標.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Java 程式設計 講師:FrankLin.
Chap3 Linked List 鏈結串列.
Topic Introduction—RMI
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
開始使用Visual C++.
第 19 章 XML記憶體執行模式.
|07 函數.
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第十章 指標.
第六章 簡介運算子超載 (Operator Overloading)
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
OOP Recitation Course Speaker: Liu Yu-Jiun Date: 2009/3/25.
CH05. 選擇敘述.
大綱:加減法的化簡 乘除法的化簡 去括號法則 蘇奕君 台灣數位學習科技股份有限公司
第7章 指標 7-1 指標的基礎 7-2 指標變數的使用 7-3 指標運算 7-4 指標與陣列 7-5 指向函數的指標.
挑戰C++程式語言 ──第8章 進一步談字元與字串
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
C qsort.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
計算機程式設計 老師:蘇炳煌 助教:楊斯竣.
陣列與結構.
12 虛擬函數 12.1 多載與超載 12-2 多載函數 12-2 超載函數 虛擬函數 12-6 同名異式 12-7
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
1-1 二元一次式運算.
實習八 函式指標.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
計算機程式設計 老師:謝孟諺 助教:楊斯竣.
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
Programming & Language Telling the computer what to do
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
台大資訊工程學系 資訊系統訓練班 第119期 吳晉賢
第三章 比與比例式 3-1 比例式 3-2 連比例 3-3 正比與反比.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

挑戰C++程式語言 ─第13章 運算子的覆載

本章主題 夥伴函式與this指標 覆載的基本觀念 串流運算子覆載 一元運算子覆載 二元運算子覆載

夥伴函式 夥伴函式(Friend Functions)指的是被定義在類別外的一個函式,但是它具有權力可以存取類別中的所有資料成員

this指標 this是C++的一個保留字,它是一個指向物件自己的指標。所有的操作成員均會有this這個隱含的引數

覆載的基本觀念 傳統的程式語言: 覆載早已經存在了。舉例來說,無論是針對整數、浮點數或雙倍精度浮點數,它們的除法都是用同一個運算子 / ,而除法運算子會依運算元的資料型態,使用正確的程式碼來加以運算。 同樣地,加法、減法、乘法也是具有這樣的性質 這些運算子是否也適用於新定義的類別?

定義運算子覆載 在運算子的前面加上operator這個保留字來形成覆載函式的名稱。例如operator+()就是加法運算子的覆載操作函式 定義函式的引數個數與引數的資料型態: 基本上,一元運算子的引數個數為零個,而二元運算子須要一個引數 對於 ++ 和 -- 這兩個特殊的一元運算子,有前置式(如++x)與後置式(如x++)的差別,因此,必須用一個引數來加以分辨

串流運算子<<和>>的覆載 C++在iostream類別庫中定義了ostream (Output Stream)和istream (Input Stream)兩個分別用來作輸出與輸入的類別,cout是ostream的一個案例,而cin則是istream的案例 除了iostream類別庫之外,針對其它類別定義 << 和>> 覆載操作函式時,絕對不能將函式定義為該類別的成員函式,必須以夥伴函式

串流運算子<<和>>的覆載

一元運算子 - 取址運算子& &運算子如果為一元運算的話,它是用來取出變數在記憶體中的位址,而如果是二元運算的話,則是用來對兩個運算元做AND布林運算 C++會為所有新定義的類別預設其覆載函式,也就是說,如果類別定義中無operator & ()函式,我們仍然可以對這個類別作取址的運算,其結果會傳回該類別物件的位址

一元運算子 - !運算子 ! 運算子在C++語言中,代表的是布林運算中的NOT 可以將其定義為類別的操作成員之一,也可以把它定義在類別外以夥伴函式的方式來完成operator ! ()函式的定義

一元運算子 - ++與--運算子 這兩個運算子分別可以有兩種不同意義的運作形式:前置運算與後置運算 前置運算之覆載函式的定義與一般一元運算子的覆載函式相同,若定義為類別的操作成員之一,並不需要引數。若是以夥伴函式的方法定義在類別外,則須加上一個引數 後置運算的定義方式,則是在函式中額外再加上一個輔助引數,其資料型態必須為int,且其值永遠等於0

一元運算子 - ++與--運算子

二元運算子 - 足標運算子[] 足標運算子(subscription operator)[] 是用來取出陣列(array)資料結構中的某一個元素 當編譯程式看到像x[y]的敘述時,會呼叫x.operator[](y),其中x是一個類別的物件,而y則是位置引數 operator[]()只能被定義成為類別的操作成員之一,也就是不可以用夥伴函式的方法定義[]運算子覆載函式

二元運算子 - 足標運算子[]

設值運算子 = C++會為每個類別預設一個設值運算子覆載函式,其中採取了將資料成員逐一拷貝的方式完成設值的動作 當資料成員中含有屬於指標型態的時候,這樣的預設動作通常不是我們所想要的 定義設值運算子覆載函式,也就是operator = (type)必須注意到三個要點: operator = (type)一定要被定義成為類別的操作成員之一,不能夠以夥伴函式或是類別外一般函式的形式來定義; 可以定義多個設值運算子覆載函式,隨著每個函式的引數型態不同,可以接收不同型態資料的設值動作 所有的設值運算覆載函式的回傳型態都應該設成該類別的參考型態