在類的定義中,前面有 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...