c 從入門到精通 多型

2021-10-06 18:31:05 字數 1391 閱讀 8825

多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。

c++ 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。

下面的例項中,基類 shape 被派生為兩個類,如下所示:

#include

using

namespace std;

class

shape

intarea()

};class

rectangle

:public shape

int area ()}

;class

********

:public shape

int area ()}

;// 程式的主函式

intmain()

當上面的**被編譯和執行時,它會產生下列結果:

parent class area

parent class area

導致錯誤輸出的原因是,呼叫函式 area() 被編譯器設定為基類中的版本,這就是所謂的靜態多型,或靜態鏈結 - 函式呼叫在程式執行前就準備好了。有時候這也被稱為早繫結,因為 area() 函式在程式編譯期間就已經設定好了。

但現在,讓我們對程式稍作修改,在 shape 類中,area() 的宣告前放置關鍵字 virtual,如下所示:

class shape 

virtual int area()

virtual

void

eat()}

;class

cat:

public animal

virtual

void

eat()}

;//呼叫dospeak ,speak函式的位址早就繫結好了,早繫結,靜態聯編,編譯階段就確定好了位址

//如果想呼叫貓的speak,不能提前繫結好函式的位址了,所以需要在執行時候再去確定函式位址

//動態聯編,寫法 dospeak方法改為虛函式,在父類上宣告虛函式,發生了多型

// 父類的引用或者指標 指向 子類物件

void

dospeak

(animal & animal)

//animal & animal = cat

//如果發生了繼承的關係,編譯器允許進行型別轉換

void

test01()

void

test02()

intmain()

小貓在說話
test2說明了多型的原理

小貓在說話

小貓在吃魚

Nginx從入門到精通

1 nginx配置檔案載入機制 採用nginx s reload命令載入nginx的配置檔案,master程序讀取配置檔案,建立新的worker程序,向老的worker程序傳送shutdown命令。老的worker程序不再接受新的請求,待老的請求處理完成後,就會停掉。2 location匹配機制 當...

scrot 從入門到精通

無論是撰寫技術教程,還是展示桌面或應用,恐怕 scrot 都是必不可少的工具。scrot 是螢幕抓圖工具中的 皎皎 佼佼者,它小巧而不失為強大,精練而不缺少靈活。scrot 主要用在命令列下,它使用 imlib2 庫來抓取並儲存影象。在 ubuntu 中,可以使用sudo apt get insta...

mysql從入門到精通

在sql語言中,用join實現表與表的關聯,用on指定聯合表的查詢條件,如 實現三表聯查,可以用table1.table2.來排列 顯示資訊的先後順序 select from user left join address on user id address.user id left join us...