如何使用C++函數(shù)對(duì)象?
C++函數(shù)對(duì)象是通過(guò)一張?zhí)摵瘮?shù)表來(lái)實(shí)現(xiàn)的。簡(jiǎn)稱為V-Table。在這個(gè)表中,主是要一個(gè)類(lèi)的虛函數(shù)的地址表,這張表解決了繼承、重載的問(wèn)題,保證其容真實(shí)反應(yīng)實(shí)際的函數(shù)。
適合對(duì)屬于基本數(shù)據(jù)類(lèi)型的對(duì)象排序,它使用<作為排序比較規(guī)則,第2種語(yǔ)法則是根據(jù)指定排序規(guī)則comp來(lái)進(jìn)行排序,其中comp參數(shù)就是一個(gè)函數(shù)對(duì)象。如果要排序的對(duì)象不是如int,float等簡(jiǎn)單類(lèi)型或不想使用<作為排序規(guī)則的話就得使用第2種語(yǔ)法。
指定一個(gè)函數(shù)對(duì)象來(lái)作為排序規(guī)則(函數(shù)對(duì)象)進(jìn)行排序,那函數(shù)對(duì)象究竟是什么了,其實(shí)簡(jiǎn)單地說(shuō)它就是一些使用起來(lái)像調(diào)用函數(shù)一樣的對(duì)象,如:一般的函數(shù),函數(shù)指針,或重載了()運(yùn)算符的類(lèi)的實(shí)例等,使用這些對(duì)象的方式好像調(diào)用函數(shù)一樣所以稱這些對(duì)象為C++函數(shù)對(duì)象,如下就是函數(shù)對(duì)象定義:
- void print(int x)
- {
- if(x>=0&&x<=100) cout<<x<<” ”;
- }
- //函數(shù)對(duì)象指針
- typedef void(*ptPrint)(int x);
- ptPrint prt=print;
- //一個(gè)重載了()運(yùn)算符得類(lèi)
- class isOk
- {
- public:
- bool operator () (int val)
- {
- if(val<0||val>100)
- {
- return false;
- }
- return true;
- }
- };
有了上面得定義后,我們就可以以函數(shù)調(diào)用的形式使用上面的函數(shù)對(duì)象了,如: for_each(vectorA.begin(),vectorA.end(),print)打印大于等于0小于等于100的數(shù), transform(vectorA.begin(),vectorA.end(),vectorB.begin(),isOk())判斷向量vectorA中值x的范圍是否在0之100之間。
如果在則向量vectorB對(duì)應(yīng)的值為真,否則為假,其中vectorB中的數(shù)據(jù)類(lèi)型為bool。在實(shí)際中往往會(huì)根據(jù)調(diào)用函數(shù)對(duì)象時(shí)參數(shù)的多少將函數(shù)對(duì)象分為三種形式,,無(wú)參函數(shù)對(duì)象,一元函數(shù)對(duì)象和二元函數(shù)對(duì)象,剛才的C++函數(shù)對(duì)象就是一個(gè)無(wú)參函數(shù)對(duì)象。無(wú)參函數(shù)對(duì)象與一元,二元函數(shù)對(duì)象有很大的區(qū)別,一元,二元函數(shù)對(duì)象的定義需要繼承以下函數(shù)原型:
- class Grade
- {
- public:
- Grade(int id,string name,int score)
- {
- ID=id;
- Name=name;
- Score=score;
- }
- int ID;
- string Name;
- int Score;
- };
【編輯推薦】