對於class型別,必須用new/delete來建立銷毀物件,malloc/free是無法勝任的。
new:動態建立乙個物件(1)申請一塊記憶體(2)內部呼叫了建構函式
delete:釋放這個物件(1)呼叫了析構函式(2)釋放記憶體
動態建立乙個物件:
circle* c = new circle(); //預設建構函式
circle* c = new circle; //不加括號也可以
circle* c = new circle(1,1,4); //傳構造引數
釋放物件:delete c;
動態建立多個物件:
circle* c = new circle[4];
delete c;
注意:含有預設建構函式的類,才可能使用new一次性構造多個物件。
在c++裡,有繼承的語法:
class tutorial;
class videotutorial : public turtorial;
語法:class b: public a; 表示類b繼承於類a,把a稱為父類(基類),把b稱為子類(派生類)。當類b繼承於a時,則自動的將父類中的所有public成員繼承。
例如,
class turtorial;
則在videoturtorial類中也有了這些成員,而不必顯示地寫出。
子類只需要把自己的獨有的那部分寫出來,例如,
class videotutorial : public turtorial;
小結:
1.用classb:public a{} 表示b繼承於a
2.當b繼承於a後,父類的所有protected/public成員都能被繼承
3.什麼叫繼承?就是這些父類的成員如同直接寫在子類裡一般
4.**上可以簡化
函式的重寫:子類可以重寫父類繼承而來的函式(overwriting),例如,
class parent;
class child:public parent;
如果重寫的時候,還是要嵌入呼叫一下父類的函式,怎麼辦?
void child ::test()
父類指標指向子類物件,例如,
從語法本質上講,子類的前半部分就是父類,因而可以將子類物件的指標直接轉化為父類。
class parent;
virtual本身表明該函式即將被子類重寫。
考慮以下情況,
parent* obj = new child();
obj->test();
此時,如果test()在父類中被宣告為virtual,則呼叫的是子類test(). virtual的作用:根據物件的實際型別,呼叫相應型別的函式。
注意:1.只需要在父類中講函式宣告為virtual,子類自動地就是virtual了
2.即將被重寫的函式新增virtual,是一條該遵守的編碼習慣
C 學習筆記 物件導向程式設計
1.什麼是類 物件和成員?類 乙個類包含很多的物件。比如人類就是乙個類,張 三 李四等是人類的物件,這些物件擁有人類共同的功能和資料,如身高 體重 年齡等,而具體化這些資料我們可看做是人類的成員變數。所以類是由若干個變數和相關函式組成,而物件則擁有這些變數和函式。2.如何宣告乙個類?類只有先宣告才能...
c 物件導向程式設計(三)
一 委託和事件 c 中的委託類似於c或c 中的函式指標。使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的 而不必在編譯時知道將呼叫哪個方法。與c或c 中的函式指標不同,委託是物件導向 型別安全的,並且是安全的。宣告方法 屬性 委託修飾符 delegat...
《物件導向程式設計 C 》學習筆記1
組織問題的方法 設計和具體語言實現 物件,而不是控制或資料流,是我們設計和實現的焦點 關注東西,而不是過程.物件互相之間傳送和接收訊息 傳送者傳遞訊息,做不做 怎麼做由接收者決定,這是 蛋圖 的核心 訊息可能導致接收者改變狀態或返回結果 物件是東西,對訊息做出反應 類是東西的種類 一切都是物件 程式...