北京大學MOOC C 學習筆記(五)虛函式和多型

2021-08-29 13:45:52 字數 2194 閱讀 9187

在類的定義中,前面有 virtual 關鍵字的成員函式就是虛函式。

class base ;

int base::get()

virtual 關鍵字只用在類定義裡的函式宣告中,寫函式體時不用。

若該指標指向乙個基類的物件,那麼被呼叫是基類的虛函式;

若該指標指向乙個派生類的物件,那麼被呼叫的是派生類的虛函式。

這種機制就叫做「多型」。

class cbase 

};class cderived:public cbase

};int main()

若該引用引用的是乙個基類的物件,那麼被呼叫是基類的虛函式;

若該引用引用的是乙個派生類的物件,那麼被呼叫的是派生類的虛函式。

這種機制也叫做「多型」。

class cbase 

};class cderived:public cbase

};int main()

在物件導向的程式設計中使用多型,能夠增強程式的可擴充性,即程式需要修改或增加功能的時候,需要改動和增加的**較少。

多型使用例項:幾何形體處理程式

何形體處理程式: 輸入若干個幾何形體的引數,

要求按面積排序輸出。輸出時要指明形狀。

input:

第一行是幾何形體數目n(不超過100).下面有n行,每行以乙個字母c開頭.

若 c 是 『r』,則代表乙個矩形,本行後面跟著兩個整數,分別是矩形的寬和高;

若 c 是 『c』,則代表乙個圓,本行後面跟著乙個整數代表其半徑

若 c 是 『t』,則代表乙個三角形,本行後面跟著三個整數,代表三條邊的長度

output:

按面積從小到大依次輸出每個幾何形體的種類及面積。每行乙個幾何形體,輸

出格式為:

形體名稱:面積

sample input:

3r 3 5

c 9t 3 4 5

sample output

********:6

rectangle:15

circle:254.34

#include #include #include using namespace std;

class cshape

;class crectangle:public cshape

;class ccircle:public cshape ;

class c********:public cshape ;

double crectangle::area()

void crectangle::printinfo()

double ccircle::area()

void ccircle::printinfo()

double c********::area()

void c********::printinfo()

cshape * pshapes[100];

int mycompare(const void * s1, const void * s2);

int main()

}qsort(pshapes,n,sizeof( cshape*),mycompare);

for( i = 0;i printinfo();

return 0;

}int mycompare(const void * s1, const void * s2)

用基類指標陣列存放指向各種派生類物件的指標,然後遍歷該陣列,就能對各個派生類物件做各種操作,是很常用的做法 。

在建構函式和析構函式中呼叫虛函式,不是多型。編譯時即可確定,呼叫的函式是自己的類或基類中定義的函式,不會等到執行時才決定呼叫自己的還是派生類的函式。

class son

};

a a ; // 錯,a 是抽象類,不能建立物件

a * pa ; // ok,可以定義抽象類的指標和引用

pa = new a ; //錯誤, a 是抽象類,不能建立物件

class a

a( )

};class b:public a

};int main()

蓋茨北京大學演講

大家早上好!微軟認為計算將是個人的,所有的人們創造出來工具,在所有的工具中個人電腦將是重要的一點,它能夠為人們提供溝通以及製造,做生意的全新的方式,這些充滿了好奇心的學生,更好地獲取各種各樣的資訊,讓他們找到自己問題的答案。在過去的30年中,確實是令人難以置信的。我們看到計算以後的方式發展,在30多...

參加「北京大學CIO論壇」

今天上午9 00左右,忽然想起來曾經接到過乙份通知 北京大學cio論壇。或者中國資訊化高峰論壇暨首屆北大cio班結業典禮。內心裡不是很喜歡湊這種熱鬧,畢竟我已經看過 經歷過太多這樣的東西,印象中覺得就不是太好。但是,看到這是中國的最高學府首次舉辦類似的活動,心裡覺得還是有必要去看看的。正想著,身子還...

子串計算 北京大學

牛客網題目鏈結 直接暴力,用map函式存每個子串出現的次數,子串的型別使用兩層迴圈遍歷。注意字串的邊界問題,這裡需要排序所以直接用map include include include include include include include include include include u...