欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何應(yīng)用C++的函數(shù)對(duì)象

 更新時(shí)間:2016年08月14日 08:59:37   投稿:daisy  
C++函數(shù)對(duì)象是C語(yǔ)言程序的主要組成部分,一個(gè)函數(shù)可以調(diào)用其他函數(shù)。在設(shè)計(jì)良好的程序中,每個(gè)函數(shù)都有特定的目的。本文將介紹C++函數(shù)對(duì)象的應(yīng)用,有需要的可以參考學(xué)習(xí)。

前言

C++函數(shù)對(duì)象是通過(guò)一張?zhí)摵瘮?shù)表來(lái)實(shí)現(xiàn)的。簡(jiǎn)稱為V-Table。在這個(gè)表中,主是要一個(gè)類的虛函數(shù)的地址表,這張表解決了繼承、重載的問(wèn)題,保證其容真實(shí)反應(yīng)實(shí)際的函數(shù)。

應(yīng)用

假如我們實(shí)現(xiàn)了這樣的一個(gè)單向鏈表:

class LinkedListNode {
 int data_;
 LinkedListNode *next_;
};
class LinkedList {
 public:
 void insert(LinkedListNode* &p);
 void del(LinkedListNode *p);
 private:
 LinkedListNode *head_;
};

其中insertp插入到head_為頭指針的鏈表中,而p對(duì)應(yīng)的內(nèi)存由外面分配好,調(diào)用的時(shí)候類似于這樣:

LinkedList list;
LinkedListNode *p = new LinkedListNode(2, NULL);
list.insert(p);

其中,p可能是通過(guò)new得到,也可能是malloc出來(lái)。好,問(wèn)題來(lái)了:

這個(gè)類的del函數(shù)應(yīng)該如何實(shí)現(xiàn)呢?如果節(jié)點(diǎn)是new出來(lái)的,我們得delete;如果是malloc出來(lái)的,我們得使用配套的free。否則,行為就是undefined。而且,用戶還可能實(shí)現(xiàn)了自己的定制的內(nèi)存分配回收例程。我們并不知道該內(nèi)存是如何分配得到的。這就是問(wèn)題所在。

解決方法是讓用戶將正確的、對(duì)應(yīng)的、適配的資源釋放例程傳遞進(jìn)來(lái),然而deleteexpression,free是函數(shù),更悲劇的是不同用戶實(shí)現(xiàn)的資源回收函數(shù)原型不盡相同。如何做呢?函數(shù)對(duì)象是解決這個(gè)問(wèn)題的利器。

我們可以這樣:

template<typename CallBack>
class LinkedList
{
 public:
 void insert(LinkedListNode* &p);
 void del(LinkedListNode *p);
 private:
 LinkedListNode *head_;
};

在del中:

void del(LinkedListNode *p)
{
 //...
 LinkedListNode *prev = get_prev(p);
 prev->next_ = p->next_;
 CallBack cb;
 cb(p);//調(diào)用用戶提供的資源回收例程
}

用戶需要實(shí)現(xiàn)自己的CallBack類的operator()成員函數(shù)。如下所示:

class MyReclaimRoutine { public: void operator() (LinkedListNode *p) { delete p; //free(p) ? my_release_func(p) ? all up to you! } };

然后就萬(wàn)事大吉了:

LinkedList<MyReclaimRoutine> list;
LinkedListNode *p = new LinkedListNode(2, NULL);
list.insert(p);
list.del(p);//ok! delete p will be called

總結(jié)

以上就是C++函數(shù)對(duì)象的應(yīng)用的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)C++的函數(shù)對(duì)象能有所幫助,如果有疑問(wèn)歡迎大家留言討論。

相關(guān)文章

  • 快速模式匹配算法(KMP)的深入理解

    快速模式匹配算法(KMP)的深入理解

    本篇文章是對(duì)快速模式匹配算法(KMP)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用C++調(diào)用Python代碼的方法步驟

    使用C++調(diào)用Python代碼的方法步驟

    這篇文章主要介紹了使用C++調(diào)用Python代碼的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)三子棋游戲

    C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語(yǔ)言常見排序算法歸并排序

    C語(yǔ)言常見排序算法歸并排序

    這篇文章主要介紹了C語(yǔ)言常見排序算法歸并排序,歸并排序是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法的一個(gè)非常典型的應(yīng)用
    2022-07-07
  • C++之vector容器的swap方法解讀

    C++之vector容器的swap方法解讀

    這篇文章主要介紹了C++之vector容器的swap方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • c++下使用windows api遍歷指定文件夾及其子文件夾中的文件

    c++下使用windows api遍歷指定文件夾及其子文件夾中的文件

    這篇文章主要介紹了c++下使用windows api遍歷指定文件夾及其子文件夾中的文件實(shí)現(xiàn)代碼,一般都是通過(guò)c++自帶的函數(shù)實(shí)現(xiàn)
    2021-07-07
  • 一文帶你搞懂C++中的流量控制

    一文帶你搞懂C++中的流量控制

    限流可以認(rèn)為服務(wù)降級(jí)的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的,這篇文章小編就來(lái)帶大家深入了解一下如何利用C++實(shí)現(xiàn)流量控制吧
    2023-10-10
  • 北郵考研復(fù)試C語(yǔ)言上機(jī)題目精選

    北郵考研復(fù)試C語(yǔ)言上機(jī)題目精選

    這篇文章主要介紹了北郵考研復(fù)試C語(yǔ)言上機(jī)題目精選,摘自2010年北郵CS的復(fù)試,需要的朋友可以參考下
    2015-08-08
  • c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法

    c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法

    本篇文章主要介紹了c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法,詳細(xì)的介紹了可變參數(shù)函數(shù)的詳細(xì)用法和源碼實(shí)例,有興趣的可以了解一下
    2017-07-07
  • C語(yǔ)言刷題之倒置字符串的解題全過(guò)程

    C語(yǔ)言刷題之倒置字符串的解題全過(guò)程

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言刷題之倒置字符串的解題全過(guò)程,這是一道我們經(jīng)常刷到的實(shí)戰(zhàn)題目,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論