面向对象程序设计基本概念
面向對象程序設計基本概念
?
重點: C++中的 多態 和 指針間接賦值
1): 多態的三個條件
? ? ? ??a: 子類繼承父類
? ? ? ??b: 虛函數(虛表及虛表指針)
? ? ? ??c: 父類引用或指針指向子類對象(參數類型的逆變和返回類型的協變)
? ? ? ? ? ? ? ??// 參數類型的逆變(contravariance)是指實現的參數類型是接口或委托定義的參數類型的父類。
? ? ? ?? ? ? ?? // 返回類型的協變(covariance)指返回類型是接口或委托定義返回類型的子類
2): 指針間接賦值的三個條件
? ? ? ??a: 外部實參和內部形參
? ? ? ??b: 外部實參取地址傳給內部形參
? ? ? ??c: 形參通過解引用可以間接修改了外部實參
?
3): 變量名和變量地址:
? ? ? ??變量名實際上是一個符號地址,在對程序編譯連接時由系統給每一個變量名分配一個內存地址。在程序中從變量中取值,實際上是通過變量名找到相應的內存地址,從其存儲單元中讀取數據。
?
?
1、對象
定義:對象是指客觀存在的事物,由一組屬性和行為構成。
對象 = 屬性 + 行為
在面向對象程序設計中,對象之間也需要聯系,我們稱作對象的交互。
?
2、類
定義:
(1)類是具有共同特征的對象的抽象。
(2)類是對具有共同屬性和行為的一類事物的抽象描述。 共同的屬性被描述為類的數據成員,共同行為被描述為類的成員函數。
?
3、實例
定義:實例是由類所創建的具體對象,即給類定義的數據賦予具體值,操作賦予確定處理程序而所獲得的實際對象。
?
4、消息
定義:
(1)一個對象向另一個對象發出的請求。
(2)是向某對象請求服務的一種表達方式,是對象與外界、對象與其他對象之間聯系的工具。
?
性質:
(1)同一個對象可以接收不同形式的多個消息,作出不同的響應。
(2)相同形式的消息可以傳遞給不同的對象,所作出的響應可不同。
(3)消息的發送可以不考慮具體的接受者。
?
5、方法
定義:是對某對象接收消息后所采取的操作的描述。
?
6、抽象
定義:對實例進行分析,抽取出共同性質。
?
7、封裝(Encapsulation)
定義:
(1)將數據抽象的外部接口與內部實現的細節清楚地分開
(2)封裝就是將抽象得到的數據和行為相結合,形成一個有機的整體
?
作用:
(1)可以隱藏實現細節,使得代碼模塊化。
(2)封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,一特定的訪問權限來使用類的成員。
(3)封裝主要依靠對類、數據和方法的訪問控制,從語法上講就是加上private、protected、public等關鍵詞。
(4)封裝的意義在于保護或者防止代碼(數據)被我們無意中破壞。在面向對象程序設計中數據被看作是一個中心的元素并且和使用它的函數結合的很密切,從而保護它不被其它的函數意外的修改。
?
8、繼承(InHeritance)
定義:
(1)子類可以從父類繼承屬性和操作,提高編程效率
(2)通過繼承關系利用已有類構造新類
?
作用:代碼重用
(1)避免代碼重復開發,減少代碼和數據冗余
(2)通過增強一致性來減少模塊間的接口和界面
?
9、多態(Polymorphism)
定義:
(1)不同的對象收到相同的消息時產生多種不同的行為方式。
(2)多態性是允許你將父對象設置成為和一個或更多的他的子對象相等的技術。
(3)允許將子類類型的指針賦值給父類類型的指針。
(4)同一操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果。
?
作用:接口重用
?
(1)編譯時的多態性
通過函數重載和運算符重載實現。
對于非虛的成員來說,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操作。
?
(2)運行時的多態性
通過類的繼承關系和虛函數來實現。
程序在執行前根據函數名和參數無法確定應該調用哪個函數,必須在程序執行的過程中根據具體的情況來動態確定。
?
編譯時的多態性為我們提供了運行速度快的特點,而運行時的多態性則帶來了高度靈活和抽象的特點。
?
實現
(1)接口多態性
(2)繼承多態性
(3)通過抽象類實現的多態性
?
10、重載(Overload)
定義:將語義、功能相似的幾個函數用同一個名字表示,但參數或返回值不同(包括類型、順序不同)
?
特征:
(1)相同的范圍(在同一個類中);
(2)函數名字相同;
(3)參數不同;
(4)virtual 關鍵字可有可無。
?
11、重寫(Overwrite)
定義:是指派生類的函數屏蔽了與其同名的基類函數
?
特征:
(1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)。
?
12、覆蓋(Override)
定義:是指派生類函數覆蓋基類函數
特征:
(1)不同的范圍(分別位于派生類與基類);
(2)函數名字相同;
(3)參數相同;
(4)基類函數必須有virtual 關鍵字。
?
?
13、面向對象程序設計
定義:面向對象程序設計是一種新的程序設計范型。
?
特征:
程序 = 對象 + 消息
?
主要特點:
(1)程序由類的定義和類的使用兩部分組成,
在主程序中定義各對象并規定它們之間傳遞消息的規律。
(2)程序中的一切操作都是通過向對象發送消息來實現的,
對象接收到消息后,啟動有關方法完成相應操作。
(3)類有繼承關系產生相互間的關系
?
14、面向過程程序設計
定義:采用模塊化、按照解決問題的步驟分步設計程序。
?
面向過程程序設計思想的核心--功能分解
面向過程程序設計將數據結構和過程作為兩個實體對待,重點在過程。
?
程的設計存在以下缺點:
(1)可重用性差
(2)可維護性差
(3)安全性差
上缺點的原因:數據和過程的分離
?
總結
以上是生活随笔為你收集整理的面向对象程序设计基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3. golang 流程控制
- 下一篇: 如何理解深度学习分布式训练中的large