物件導向的程式設計提高
物件導向的程式設計方法:
· 將某類客觀事務共同特點(屬性歸納出來),形成乙個資料結構;
· 將這類事務所能進行的行為也歸納出來,形成乙個個函式。
物件導向的程式設計的四個基本特點:抽象、封裝、繼承、多型。
類的成員函式和類的定義分開寫
class
crectangle
int crectangle::
area()
int crectangle::
perimeter()
void crectangle::
init
(int w_,
int h_)
crectangle::說明後面的函式是crectangle類的成員函式。
類成員的可訪問範圍
-private:私有成員,只能在成員函式內訪問
-public:公有成員,任何地方
-protected:保護成員
成員函式的過載及預設引數
成員函式也可以過載,可以帶預設引數
建構函式
名字與類名相同,可以有引數,不能有返回值。
作用是對物件進行初始化,如給成員變數賦初值。
如給定義類時沒寫建構函式,則編譯器生成乙個預設的無引數的建構函式。
物件生成時建構函式自動被呼叫。物件一旦生成,就再也不能在其上執行建構函式。
可以有多個建構函式,引數個數或型別不同。
class
complex
複製建構函式
· 只有乙個引數,即對同類物件的引用。
· 形如x::x(x&)或x::x(const x &),二者選一,後者能以常量物件作為引數。
· 若沒有定義複製建構函式,那麼編譯器生成預設。
class
complex
;complex c1;
// 呼叫預設無引數建構函式
complex c2
(c1)
;// 呼叫預設的複製建構函式,將c2初始化成和c1一樣
型別轉換建構函式
實現型別的自動轉換。
class
complex
complex
(double r,
double i)};
intmain()
析構函式
析構函式在物件作為函式返回值返回後被呼叫
建構函式和析構函式的呼叫時機
class
demo
~demo()
};
this指標
非靜態成員函式中可以直接使用this來代表指向該函式作用的物件的指標。
class
complex
complex
(double r,
double i)
:real
(r),
imag
(i) complex addone()
}int
main()
classa}
;// -> void hello(a *this)
// 輸出hello
this指標和靜態成員函式
靜態成員函式中不能使用this指標!
因為靜態成員函式並不具體作用與某個物件。
因此,靜態成員函式的真實的引數的個數,就是程式中寫出的引數個數。
靜態成員變數
靜態成員:在說明前命加了static關鍵字的成員。
普通成員變數每個物件有各自的乙份,而靜態成員變數一共就乙份,為所有物件共享。
普通成員函式必須具體作用於某個物件,而靜態成員函式並不具體作用於某個物件。
靜態成員不需要通過物件就能訪問。
sizeof 運算子不會計算靜態成員變數。
class
myclass
;
則sizeof(cmyclass)等於4。
如何訪問靜態成員:
1)類名::成員名
crectangle::
printtotal()
;
2)物件名.成員名
crectangle r;
r.printtotal()
;
3)指標->成員名
crectangle *p =
&r;p-
>
printtotal()
;
4)引用.成員名
crectangle &ref=r;
int n = ref.ntotalnumber;
靜態成員變數本質上是全域性變數,哪怕乙個物件也不存在,類的靜態成員變數也存在。
靜態成員函式本質上是全域性函式。
設定靜態成員這種機制的目的是將和某些緊密相關的全域性變數和函式寫到類裡面,看上去像乙個整體,易於維護和理解。
例:對於矩形類,需要隨時指導矩形總數和總面積的圖形處理程式。
可以用全域性變數來記錄總述和總面積( 用靜態成員將這兩個變數封裝進類中)。
class
crectangle
;crectangle::
crectangle
(int w_,
int h_)
crectangle::
~crectangle()
void crectangle::
printtotal()
在使用crectangle類時,有時會呼叫複製建構函式生成臨時的隱藏的crectangle物件:
呼叫乙個以crectangle類物件作為引數的函式時。
呼叫乙個以crectangle類物件作為返回值的函式時。
臨時物件在消亡時會呼叫析構函式,減少ntotalnumber和ntotalarea的值,也就是平白無故的減少了。
解決辦法:為crectangle類寫乙個複製建構函式。
成員物件和封閉類
封閉類:有成員物件的類。
未完待續…
C 學習筆記 物件導向程式設計
1.什麼是類 物件和成員?類 乙個類包含很多的物件。比如人類就是乙個類,張 三 李四等是人類的物件,這些物件擁有人類共同的功能和資料,如身高 體重 年齡等,而具體化這些資料我們可看做是人類的成員變數。所以類是由若干個變數和相關函式組成,而物件則擁有這些變數和函式。2.如何宣告乙個類?類只有先宣告才能...
《物件導向程式設計 C 》學習筆記1
組織問題的方法 設計和具體語言實現 物件,而不是控制或資料流,是我們設計和實現的焦點 關注東西,而不是過程.物件互相之間傳送和接收訊息 傳送者傳遞訊息,做不做 怎麼做由接收者決定,這是 蛋圖 的核心 訊息可能導致接收者改變狀態或返回結果 物件是東西,對訊息做出反應 類是東西的種類 一切都是物件 程式...
物件導向程式設計(C )學習筆記一
類 class 是對結構體struct的增強,也是用於自定義型別的。struct object class object 將關鍵字struct改為class,增加訪問修飾符public object obj obj.a 11 obj.b 12 obj.c 13.0 obj.d 14.0 class ...