本篇主要講物件導向的封裝和繼承特性,另乙個特性多型會在後面的文章中講到。
目錄:物件導向程式設計過程
封裝的實現
繼承的方式
繼承後物件的構造順序
繼承的種類
一、什麼是物件導向程式設計(object oriented programming,oop)思想?
在學習c++之前我們一直說面向過程,也就是對於乙個需要解決的問題,進行分析,得出每個步驟的實現和實現順序的過程。所以自然而然的就能夠進行面向過程程式設計,既只需用函式實現這些步驟,然後在使用的時候乙個乙個進行呼叫即可。但是為了實現**的可移植性和可擴充套件性,就有了物件導向。就是把構成問題的事物分解成各個物件,然後描述某一類物件在解決整個問題步驟中的行為。用一幅圖來描述物件導向程式設計的過程。
有了物件導向程式設計技術,因此(程式=演算法+資料結構)變為了(程式=基於物件的演算法+以物件為最小單位的資料結構)
二、封裝:隱藏內部實現。
封裝如何實現?在c++裡邊,封裝和隱藏是通過訪問限定符來實現。
三種訪問限定符:
public:任意位置都能訪問成員變數。
protected:只在類中可以訪問,包括繼承和派生中派生類可以訪問父類的保護成員。
private:只有在自己的類中可以訪問,但是友元關係可以打破。
說到這塊了,順便也說一下struct和class的區別
1、對於class來說定義的變數和函式預設是private,對於struct來說預設是public
2、在struct類中定義該類成員要寫全稱。//struct b;
3、空結構體:
在windows上:c語言不允許定義空結構體、c++定義空結構體大小為1個位元組。
在linux上:c語言定義空結構體大小為0個位元組、c++定義空結構體大小為1個位元組。
class定義空結構體為1個位元組。
三、繼承:實**復用。
(1)、繼承的方式
有三種訪問限定自然也就有三種繼承關係咯!分別叫做共有繼承、保護繼承、私有繼承。如果不給出繼承關係預設是私有繼承。
寫法如下:
class base
;class derive : base
;
在c++中冒號用到兩個地方,分別是繼承和初始化列表中。
不同的繼承方式又對成員變數的訪問有什麼影響呢?用一張表總結一下:
基類中變數的訪問限定
派生類中繼承過來的訪問限定
外部對派生類中成員變數的訪問
共有繼承
public
public
能protected
protected
不能private
不可見不能
保護繼承
public
protected
不能protected
protected
不能private
不可見不能
私有繼承
public
private
不能protected
private
不能private
不可見不能
(2)、繼承後物件的構造順序
1、基類建構函式:如果有多個基類,建構函式的呼叫順序是某類在類派生表中出現的順序,而不是他們在成員初始化列表中出現的順序。
2、成員類物件的建構函式:如果有多個成員類物件,則構造順序是物件在類中被申明的順序,而不是他們出現在成員初始化列表中的順序。
3、派生類建構函式。
(3)、繼承的種類
1、單一繼承
2、多重繼承
3、重複繼承
對於這幾種繼承其中對成員變數的訪問還是結合上面的**分析即可。
OOP 物件和封裝
面向過程和物件導向的區別是 面向過程的核心是函式,以功能為中心,實現了函式級別的 重用。物件導向的核心是封裝了屬性和方法 行為 的類,以資料為中心,實現了類級別的 重用,物件導向因為採用了類,所以具有繼承和多型特徵,可以進一步重用 和簡化程式設計,而面向過程沒有。物件導向設計的過程就是抽象的過程,分...
何為OOP思想?
oop,object oriented programming,即物件導向程式設計,是一種計算機程式設計架構。oop 的一條基本原則 電腦程式是由單個能夠起到子程式作用的單元或物件組合而成。核心思想 封裝,繼承,多型。oop達到了軟體工程的三個主要目標 重用性 靈活性和擴充套件性。為了實現整體運算,...
封裝和繼承
建立person類,新增屬性姓名name和年齡age 建立student類 有分數屬性 繼承person類 並設定 get和 set方法對 name 和age賦值 建立 demo 類,例項化student類並在控制台列印姓名name 年齡age和分數 score的值 package emp20901...