5.2漫遊:物件導向程式設計思維
程式編寫:
接下來,讓我們實現乙個三層的類體系,並藉此引入c++語言中基本組成和支援物件導向程式設計方法的語法元素。我以libmat這個抽象基類作為類體系中最根本的類。我從libmat派生出book,並從book中派生出audiobook.
我們先限定介面只有乙個constructor乙個destructor和乙個print()函式,我為每個member function加上一寫程式**,輸出資訊表示它們的存在,讓我們得以跟蹤程式的行為。
預設情形下,member fuction的解析(resolution)皆在編譯時靜態進行。若要另其在執行時動態進行,我們就得在它的宣告前加上關鍵字virtual。libmat的宣告表示,其
destructor和print()皆為virtual(虛函式)
class libmat
virtual ~libmat()
virtual void print() const
};
現在我們定義乙個non-member fuction print(),它接受乙個引數,其形式為 const libmat reference:
void print(const libmat &mat)
virtual ~book()
virtual void print()const;
book中的print()覆蓋了(override)libmat的print().這也正是mat.print()所呼叫的函式。title()和auther()是兩個所謂的訪問函式,都是non-virtual inline函式。過去我們不曾介紹關鍵字protected是的,被宣告為protected所有成員函式都可以被派生類直接訪問,除此(派生類)以外,都不得直接訪問protected成員。
接下來,我從book類派生出乙個更特殊的audiobook類。audiobook除了擁有標題和作者,還有播講者。在檢視其實現之前,先讓我把audiobook物件傳給print():
cout<<"\n"<<"creating an audiobook object to print()\n";
audiobook ab("man without qualities","robert musil","kenneth meyer");
print(ab);
我們應該預期出現什麼樣的跟蹤結果呢?我們應該預期:(1)通過mat.print()呼叫的是audiobook::print()(2)ab的構造過程乃是依次呼叫libmat,book,audiobook的constructor。一下即是跟蹤結果:
creating a book object to print()
libmat::libmat() default constructor!
book::book(the castle,franz,kafka)constructor
//處理print(b)
in global print():about to print mat.print()
book::print()--i am a book object!
my title is:the castle
my auther is:franz kafka
//析構book b
book::~book() destructor!
libmat::~libmat()destructor!
該如何實現audiobook這個派生類呢?我們只需要把焦點放在audiobook與其基類book的不同之處——也就是print()——即可。當然,我們還必須提供audiobook播講者姓名,以及這個類的constructor和destructor。至於book類所提供的各項資料及操作函式,均可被audiobook直接使用,彷彿它們本來便是由audiobook定義似的。
class audiobook:public book
virtual void print() const
protected
string _narrator;
使用派生類時不必刻意區分「繼承而來的成員」和「自身定義的成員」。兩者的使用完全透明:
int main()
audiobook ab("mason and dixon","thomas pynchon","edwin leonard");
cout<<"the title is"<<<"the author is:"<<<"the narrator is:"< 一.單選題 共6題,100.0分 1以下關於c 中方法過載的說法正確的是 a 如果兩個方法名稱不同,而引數的個數不同,那麼它們可以構成方法過載 b 如果兩個方法名稱相同,而返回值的資料型別不同,那麼它們可以構成方法過載 c 如果兩個方法名稱相同,而引數的資料型別不同,那麼它們可以構成方法過載 d 如... 面向方面程式設計,又稱面向切面程式設計 aspect oriented programming 英文縮寫 aop,可以說是 oop object oriented programming 物件導向程式設計的補充和完善。oop 引入封裝,繼承,多型性等概念來建立一種物件層次結構,這種物件層次結構通俗的... 面向方面程式設計,又稱面向切面程式設計 aspect oriented programming 英文縮寫 aop,可以說是 oop object oriented programming 物件導向程式設計的補充和完善。oop 引入封裝,繼承,多型性等概念來建立一種物件層次結構,這種物件層次結構通俗的...第五章 物件導向程式設計
第五章 面向方面程式設計
第五章 面向方面程式設計