SlideShare a Scribd company logo
Object Oriented Design
using C++
More emphasis is given on data rather than procedure
Programs are divided into objects
Classes are designed such that they characterize the objects
The data and the functions that can operate on the data are
tied together.
Data is hidden and cannot be accessed by external functions.
New data and functions can be added whenever required.
Follows bottom-up Design approach.
Object Oriented Programming
2
C++ language was developed by Bjarne Strousstrup at
AT & T Bells Laboratories in early 1980’s
He thought of a language which can have object
oriented features as well as it can retain the simplicity
of C language.
3
Bjarne Strousstrup
Initially the language was names as ‘C with classes’.
However, later in 1983 the name was changed to C+
+.
C++ almost supports all the C functionalities with
some new functionalities like classes, inheritance,
function overloading, operator overloading. These
features of C++ enable creating abstract data types,
inherit properties from existing data types etc.
4
Class
5
Class 主題即是 Data 及 Function
class 是定義在 .h 內 , 方便別人使用 class 的定
義
What is Class ?
6
Class
7
Private: 只有 class 內部能存取 , 因為別人看不到
Public: 開放給外面人的存取介面 ,
所以要設計 " 成員函式 " 以存取 private 的資料
private:
data
function
public:
data
function
Access
8
C 屬於 procedure ( 程序 ) oriented 而 C++ 屬於
Object ( 資料 ) Oriented
C 會將問題分成多個 procedure ( 即一堆 C 函式 )
來處理 , 函式要用到資料時 , 可以簡單宣告成為
global
9
Constructor & Destructor in class inheritance
10
class B
class A
A();
~A()
B();
~B()
A()-->B()-->~(B)-->~A()
一個基底類別的物件指標,可以用來指向其衍生類別物
件而不會發生錯誤 ; 衍生類別的指標並不能存取基底類別
的成員
類別指標
11
class B
class A
data
function()
data;
function();
class A oA, *pA;
class B oB, *pB;
pA=&oA;
pA=&oB;
pB=&oA; //error
pB=&oB;
class A
data
function()
指標所指的位置就是會使用到的類別資料或函式
Class public Inheritance
12
1. code re-usable : data, function 出現在
base class, 則 derived class 也會有一份 。
2. 若 derived class 的 data 使用了和 base
class
相同的名稱 , 則 derived class 存取 base
class 的同名變數,需要使用 :: 明確指定是存
取 base class 的變數
3. 若 derived class 的 function 使用了和 base
class 相同的名稱 , 則 derived class 呼叫
base class 的同名函式,需要使用 :: 明確指
定是呼叫 base class 的函數
4. derived class 的 function 使用了和 base
class 相同的名稱 , 表示要進行 function
overloading
private:
data
function
public:
data A
function
public :
private :
data B
function
data A
function
visible to
derived class object
Class private Inheritance
13
1. 繼承方式不同 , 使得 derived class 有
不同的 visibility, 產生出不同的存取權
限
2. 以 private 繼承 , 繼承的東成為
Private, 便不能直接存取 / 呼叫 , 只能
藉由成員函式來操作 private 的內容物
Class A *p;
Class B ob;
Class A* p=&ob; --> error
private:
data
function
public:
data
function
public :
private :
data
function
data
function
invisible to
derived class object
class A
class B
多型 (polymorphism) 的概念,代表的是能夠在執
行階段,定義可供用戶端使用,具有不同功能但
名稱完全相同之方法或屬性的類別,
Polymorphism
14
靜態繫結( Static binding) 為 Early binding ,編譯
時就可以決定函式的呼叫對象,它們的呼叫位址
在編譯時就可以得知
動態繫結 (Dynamic binding) 為 Late binding ,執
行時期才會得知所要調用的物件或其上的公開介
面。
• C++ 利用虛擬函式( Virtual function )可以實現「執
行時期」的多型支援
Static vs dynamic binding
15
在 C++ 多型實現 Polymorphism : 類別繼承及虛
擬函式的定義與實作
一個含有虛擬函式的類別被稱為「多型的類別」
( Polymorphic class )
虛擬函式 : 執行時期的「多型」,「一個介面,
多種函式」以實現同中求異的機制
當一個基底類別型態的指標指向一個含有虛擬函
式的衍生類別,您就可以使用這個指標來存取衍
生類別中的虛擬函式
Polymorphism
16
A virtual function is a member function that is
declared within a base class and redefined by a
derived class.
虛擬函式 (virtual function) 的意義是此函式在父類
別是虛構的,需要子類別提供實作版本
當程式中以父類別的指標使用子類別的 instance
的函式成員的時候,會喚起的會是這些子類別自行
提供的版本。換句話說,這些在父類別被宣告為虛
擬 (virtual) 的函式,在父類別中的原型宣告可說是
一種程式介面 (interface) 的定義,而子類別所提供
的實作版本則稱為這些函式成員的實現 (realize)
虛擬函式
17
以父類別 ( 基礎類別 ) 的指標指向子類別 ( 衍生類
別 ) ,呼叫父類別中定義的虛擬函式,會呼叫到
子類別的實作版本
虛擬函式的函式指標會被放在類別的虛擬函式表
當中。
父類別 ( 基礎類別 ) 與子類別 ( 衍生類別 ) 應做好
權責劃分,以避免子類別設計者不小心設計了父
類別的非虛擬同名函式。
如果你的類別可能被繼承,解構函式宣告為虛擬
18
Virtual function call is resolved at run-time
(dynamic binding) whereas the non-virtual member
functions are resolved at compile time (static
binding)
Every entry in the virtual table is a pointer that
points to the derived function that is accessible by
that class. A hidden pointer is added by a compiler
to the base class which in turn calls *_vptr which is
automatically set when an instance of the class is
created and it points to the virtual table for that
class.
19

More Related Content

PPT
Abap oo
DOC
《Java程序设计》期末考试试题 (六)
PPT
Javascript之昨是今非
PPTX
Ecma script edition5-小试
PPTX
Python面向对象开发基础篇
PPT
Js培训
PDF
Demo review
PPT
N bear
Abap oo
《Java程序设计》期末考试试题 (六)
Javascript之昨是今非
Ecma script edition5-小试
Python面向对象开发基础篇
Js培训
Demo review
N bear

Similar to C++程式設計Basic (20)

PDF
PDF
PDF
PDF
PDF
PPT
Class Inheritance
PDF
Objc under the_hood_2013
PPT
DOCX
Puppet安装测试
PDF
旺铺前端设计和实现
PDF
資料庫40題強化演練.pdf
DOCX
C++基础
PPTX
7, reusing classes
PPTX
Les 3 ppt
PDF
Chapter 4 models
PPT
PPT
Hibernate教程
PDF
Django development
PDF
[圣思园][Java SE]Java se lesson 3
PPT
面向对象的Js培训
Class Inheritance
Objc under the_hood_2013
Puppet安装测试
旺铺前端设计和实现
資料庫40題強化演練.pdf
C++基础
7, reusing classes
Les 3 ppt
Chapter 4 models
Hibernate教程
Django development
[圣思园][Java SE]Java se lesson 3
面向对象的Js培训
Ad

More from IttrainingIttraining (20)

PPTX
AI 認得你,也認得照片的重複 - 智慧型圖片管理系統:結合人臉辨識與重複圖片偵測技術【艾鍗學院學員專題 】
PPTX
AI 個人造型顧問:結合 Stable Diffusion 與 CLIP 的 AI 虛擬穿搭推薦系統設計【艾鍗學院學員專題 】
PPTX
「熊出沒注意!」:結合 YOLOv8 的台灣黑熊即時預警系統設計【艾鍗學院學員專題 】
PPTX
BentoCal:食物熱量健康管理系統 - 結合 YOLOv8 的便當影像辨識與熱量推估系統【艾鍗學院學員專題 】
PPTX
AI 飆股預測:你的智慧投資夥伴-基於技術分析與基本面的 AI 股價預測系統【艾鍗學院學員專題 】
PPTX
Character Generation Master 角色生成大師【艾鍗學院】
PPTX
吉伊卡哇臉盲辨識器 - 艾鍗學院學員專題 [AI人工智慧與邊緣運算工程師班]
PPTX
AI 語音複製 X 翻譯 - 艾鍗學院學員專題 [AI人工智慧與邊緣運算工程師班]
PPTX
以人工智能打造企業內部知識管理系統以PCB板為例 - 艾鍗學院學員專題 [AI人工智慧與邊緣運算工程師班]
PPTX
Scratch遊戲設計 教學培訓課程Scratch Game【台灣程式教育協進會】
PPTX
Scratch AI應用與遊戲開發 教學培訓課程【台灣程式教育協進會】
PPTX
APCS程式設計 - C++程式語言觀念 (大學程式設計先修檢測)
PPTX
艾鍗學院課程節錄 - 自然語言處理與大型語言模型(NLP,LLM,Transformer)
PPTX
艾鍗學院學員AI專題 - 飛向Kaggle宇宙🚀🚀-系外行星之光譜與物質濃度分析
PDF
艾鍗學院學員AI專題 - 類流感預測
PPTX
艾鍗學院學員AI專題 - AI 熱量管理師
PPTX
艾鍗學院學員AI專題 - Kaggle貸款風險預測模型開發
PPTX
艾鍗學院學員AI專題 - 串流平台Netflix 熱門電影與節目特徵分析及排行上榜預測平台
PPTX
第五組_速速單字書 Quickly Collect Words
PDF
第四組_產品評論情緒分析系統
AI 認得你,也認得照片的重複 - 智慧型圖片管理系統:結合人臉辨識與重複圖片偵測技術【艾鍗學院學員專題 】
AI 個人造型顧問:結合 Stable Diffusion 與 CLIP 的 AI 虛擬穿搭推薦系統設計【艾鍗學院學員專題 】
「熊出沒注意!」:結合 YOLOv8 的台灣黑熊即時預警系統設計【艾鍗學院學員專題 】
BentoCal:食物熱量健康管理系統 - 結合 YOLOv8 的便當影像辨識與熱量推估系統【艾鍗學院學員專題 】
AI 飆股預測:你的智慧投資夥伴-基於技術分析與基本面的 AI 股價預測系統【艾鍗學院學員專題 】
Character Generation Master 角色生成大師【艾鍗學院】
吉伊卡哇臉盲辨識器 - 艾鍗學院學員專題 [AI人工智慧與邊緣運算工程師班]
AI 語音複製 X 翻譯 - 艾鍗學院學員專題 [AI人工智慧與邊緣運算工程師班]
以人工智能打造企業內部知識管理系統以PCB板為例 - 艾鍗學院學員專題 [AI人工智慧與邊緣運算工程師班]
Scratch遊戲設計 教學培訓課程Scratch Game【台灣程式教育協進會】
Scratch AI應用與遊戲開發 教學培訓課程【台灣程式教育協進會】
APCS程式設計 - C++程式語言觀念 (大學程式設計先修檢測)
艾鍗學院課程節錄 - 自然語言處理與大型語言模型(NLP,LLM,Transformer)
艾鍗學院學員AI專題 - 飛向Kaggle宇宙🚀🚀-系外行星之光譜與物質濃度分析
艾鍗學院學員AI專題 - 類流感預測
艾鍗學院學員AI專題 - AI 熱量管理師
艾鍗學院學員AI專題 - Kaggle貸款風險預測模型開發
艾鍗學院學員AI專題 - 串流平台Netflix 熱門電影與節目特徵分析及排行上榜預測平台
第五組_速速單字書 Quickly Collect Words
第四組_產品評論情緒分析系統
Ad

Recently uploaded (20)

PPTX
《HSK标准教程4下》第15课课件new.pptx HSK chapter 15 pptx
PPTX
A Digital Transformation Methodology.pptx
PPTX
3分钟读懂肯塔基大学毕业证UK毕业证学历认证
PPTX
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
PPTX
模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板
PPTX
3分钟读懂加州大学欧文分校毕业证UCI毕业证学历认证
PPTX
3分钟读懂伦敦大学学院毕业证UCL毕业证学历认证
PPTX
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
PPTX
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
PPTX
3分钟读懂诺里奇艺术大学毕业证NUA毕业证学历认证
PPTX
3分钟读懂纽曼大学毕业证Newman毕业证学历认证
PPTX
3分钟读懂渥太华大学毕业证UO毕业证学历认证
PPTX
ONU and OLT from Baudcom Jenny training PPT
PPTX
3分钟读懂拉夫堡大学毕业证LU毕业证学历认证
PPTX
3分钟读懂佩珀代因大学毕业证Pepperdine毕业证学历认证
PDF
想要安全提高成绩?我们的黑客技术采用深度伪装和多层加密手段,确保你的信息安全无忧。价格公道,流程简单,同时提供全面的信息保护和事后痕迹清理,让你轻松提升G...
PPTX
3分钟读懂圭尔夫大学毕业证U of G毕业证学历认证
PDF
01_Course_Introduction(20210916課後更新).pdf
PPTX
3分钟读懂伦敦南岸大学毕业证LSBU毕业证学历认证
PDF
黑客出手,分数我有!安全可靠的技术支持,让你的GPA瞬间提升,留学之路更加顺畅!【微信:viphuzhao】
《HSK标准教程4下》第15课课件new.pptx HSK chapter 15 pptx
A Digital Transformation Methodology.pptx
3分钟读懂肯塔基大学毕业证UK毕业证学历认证
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板
3分钟读懂加州大学欧文分校毕业证UCI毕业证学历认证
3分钟读懂伦敦大学学院毕业证UCL毕业证学历认证
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
3分钟读懂诺里奇艺术大学毕业证NUA毕业证学历认证
3分钟读懂纽曼大学毕业证Newman毕业证学历认证
3分钟读懂渥太华大学毕业证UO毕业证学历认证
ONU and OLT from Baudcom Jenny training PPT
3分钟读懂拉夫堡大学毕业证LU毕业证学历认证
3分钟读懂佩珀代因大学毕业证Pepperdine毕业证学历认证
想要安全提高成绩?我们的黑客技术采用深度伪装和多层加密手段,确保你的信息安全无忧。价格公道,流程简单,同时提供全面的信息保护和事后痕迹清理,让你轻松提升G...
3分钟读懂圭尔夫大学毕业证U of G毕业证学历认证
01_Course_Introduction(20210916課後更新).pdf
3分钟读懂伦敦南岸大学毕业证LSBU毕业证学历认证
黑客出手,分数我有!安全可靠的技术支持,让你的GPA瞬间提升,留学之路更加顺畅!【微信:viphuzhao】

C++程式設計Basic

  • 2. More emphasis is given on data rather than procedure Programs are divided into objects Classes are designed such that they characterize the objects The data and the functions that can operate on the data are tied together. Data is hidden and cannot be accessed by external functions. New data and functions can be added whenever required. Follows bottom-up Design approach. Object Oriented Programming 2
  • 3. C++ language was developed by Bjarne Strousstrup at AT & T Bells Laboratories in early 1980’s He thought of a language which can have object oriented features as well as it can retain the simplicity of C language. 3 Bjarne Strousstrup
  • 4. Initially the language was names as ‘C with classes’. However, later in 1983 the name was changed to C+ +. C++ almost supports all the C functionalities with some new functionalities like classes, inheritance, function overloading, operator overloading. These features of C++ enable creating abstract data types, inherit properties from existing data types etc. 4
  • 6. Class 主題即是 Data 及 Function class 是定義在 .h 內 , 方便別人使用 class 的定 義 What is Class ? 6
  • 7. Class 7 Private: 只有 class 內部能存取 , 因為別人看不到 Public: 開放給外面人的存取介面 , 所以要設計 " 成員函式 " 以存取 private 的資料 private: data function public: data function Access
  • 8. 8
  • 9. C 屬於 procedure ( 程序 ) oriented 而 C++ 屬於 Object ( 資料 ) Oriented C 會將問題分成多個 procedure ( 即一堆 C 函式 ) 來處理 , 函式要用到資料時 , 可以簡單宣告成為 global 9
  • 10. Constructor & Destructor in class inheritance 10 class B class A A(); ~A() B(); ~B() A()-->B()-->~(B)-->~A()
  • 11. 一個基底類別的物件指標,可以用來指向其衍生類別物 件而不會發生錯誤 ; 衍生類別的指標並不能存取基底類別 的成員 類別指標 11 class B class A data function() data; function(); class A oA, *pA; class B oB, *pB; pA=&oA; pA=&oB; pB=&oA; //error pB=&oB; class A data function() 指標所指的位置就是會使用到的類別資料或函式
  • 12. Class public Inheritance 12 1. code re-usable : data, function 出現在 base class, 則 derived class 也會有一份 。 2. 若 derived class 的 data 使用了和 base class 相同的名稱 , 則 derived class 存取 base class 的同名變數,需要使用 :: 明確指定是存 取 base class 的變數 3. 若 derived class 的 function 使用了和 base class 相同的名稱 , 則 derived class 呼叫 base class 的同名函式,需要使用 :: 明確指 定是呼叫 base class 的函數 4. derived class 的 function 使用了和 base class 相同的名稱 , 表示要進行 function overloading private: data function public: data A function public : private : data B function data A function visible to derived class object
  • 13. Class private Inheritance 13 1. 繼承方式不同 , 使得 derived class 有 不同的 visibility, 產生出不同的存取權 限 2. 以 private 繼承 , 繼承的東成為 Private, 便不能直接存取 / 呼叫 , 只能 藉由成員函式來操作 private 的內容物 Class A *p; Class B ob; Class A* p=&ob; --> error private: data function public: data function public : private : data function data function invisible to derived class object class A class B
  • 15. 靜態繫結( Static binding) 為 Early binding ,編譯 時就可以決定函式的呼叫對象,它們的呼叫位址 在編譯時就可以得知 動態繫結 (Dynamic binding) 為 Late binding ,執 行時期才會得知所要調用的物件或其上的公開介 面。 • C++ 利用虛擬函式( Virtual function )可以實現「執 行時期」的多型支援 Static vs dynamic binding 15
  • 16. 在 C++ 多型實現 Polymorphism : 類別繼承及虛 擬函式的定義與實作 一個含有虛擬函式的類別被稱為「多型的類別」 ( Polymorphic class ) 虛擬函式 : 執行時期的「多型」,「一個介面, 多種函式」以實現同中求異的機制 當一個基底類別型態的指標指向一個含有虛擬函 式的衍生類別,您就可以使用這個指標來存取衍 生類別中的虛擬函式 Polymorphism 16
  • 17. A virtual function is a member function that is declared within a base class and redefined by a derived class. 虛擬函式 (virtual function) 的意義是此函式在父類 別是虛構的,需要子類別提供實作版本 當程式中以父類別的指標使用子類別的 instance 的函式成員的時候,會喚起的會是這些子類別自行 提供的版本。換句話說,這些在父類別被宣告為虛 擬 (virtual) 的函式,在父類別中的原型宣告可說是 一種程式介面 (interface) 的定義,而子類別所提供 的實作版本則稱為這些函式成員的實現 (realize) 虛擬函式 17
  • 18. 以父類別 ( 基礎類別 ) 的指標指向子類別 ( 衍生類 別 ) ,呼叫父類別中定義的虛擬函式,會呼叫到 子類別的實作版本 虛擬函式的函式指標會被放在類別的虛擬函式表 當中。 父類別 ( 基礎類別 ) 與子類別 ( 衍生類別 ) 應做好 權責劃分,以避免子類別設計者不小心設計了父 類別的非虛擬同名函式。 如果你的類別可能被繼承,解構函式宣告為虛擬 18
  • 19. Virtual function call is resolved at run-time (dynamic binding) whereas the non-virtual member functions are resolved at compile time (static binding) Every entry in the virtual table is a pointer that points to the derived function that is accessible by that class. A hidden pointer is added by a compiler to the base class which in turn calls *_vptr which is automatically set when an instance of the class is created and it points to the virtual table for that class. 19