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

如何應用C++的函數(shù)對象

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

前言

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

應用

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

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

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

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

其中,p可能是通過new得到,也可能是malloc出來。好,問題來了:

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

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

我們可以這樣:

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)用用戶提供的資源回收例程
}

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

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

然后就萬事大吉了:

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

總結(jié)

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

相關文章

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

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

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

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

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

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

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

    C語言常見排序算法歸并排序

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

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

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

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

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

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

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

    北郵考研復試C語言上機題目精選

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

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

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

    C語言刷題之倒置字符串的解題全過程

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

最新評論