亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

談函數指針(全局/類成員函數)和函數對象

2019-11-17 05:02:52
字體:
來源:轉載
供稿:網友
  函數指針(全局函數/類成員函數)、函數對象(Function object)  一. 函數指針類型為全局函數.以下是引用片段:
  #include "stdafx.h"
  #include 
  using namespace std;
  class TestAction;
  typedef void (*fp)(int);
  void Drink(int i)
  {
  cout<<"No. "< 
  }
  void Eat(int i)
  {
  cout<<"No. "< 
  }
  class TestAction
  {
  public:
  fp testAct;
  void TestAct(int i)
  {
  if (testAct != NULL)
  {
  testAct(i);
  }
  }
  };
  int main(int argc, char* argv[])
  {
  TestAction doact;
  doact.testAct = &Drink;
  doact.TestAct(0);
  doact.TestAct(1);
  doact.TestAct(2);
  doact.testAct = &Eat;
  doact.TestAct(0);
  doact.TestAct(1);
  doact.TestAct(2);
  return 0;
  }
  二. 函數指針類型為類成員函數.以下是引用片段:
  #include "stdafx.h"
  #include 
  using namespace std;
  class Action;
  class TestAction;
  // 函數指針類型為類 Action 的成員函數
  typedef void (Action::*fp)(int);
  class Action
  {
  public:
  void Drink(int i)
  {
  cout<<"No. "< 
  }
  void Eat(int i)
  {
  // 本文轉自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=1005&d=sc37og
  cout<<"No. "< 
  }
  };
  class TestAction
  {
  public:
  // 定義一個函數指針
  fp testAct;
  //Action 對象實例 , 該指針用于記錄被實例化的 Action 對象
  Action * pAction;
  void TestAct(int i)
  {
  if ((pAction != NULL) && (testAct != NULL))
  {
  // 調用
  (pAction->*testAct)(i);
  }
  }
  };
  int main(int argc, char* argv[])
  {
  Action act;
  TestAction doact;
  doact.pAction = &act;
  doact.testAct = Action::Drink;
  doact.TestAct(0);
  doact.TestAct(1);
  doact.TestAct(2);
  doact.testAct = Action::Eat;
  doact.TestAct(0);
  doact.TestAct(1);
  doact.TestAct(2);
  return 0;
  }
  三. 函數對象 (Function object)以下是引用片段:
  #include "stdafx.h"
  #include 
  #include 
  using namespace std;
  class Action;
  class Drink;
  class Eat;
  class TestAction;
  class Action
  {
  public:
  int Operator()(int i)
  {
  Act(i);
  return i;
  }
  virtual void Act(int i) = 0;
  };
  class Drink : public Action
  {
  void Act(int i)
  {
  cout<<"No. "< 
  }
  };
  class Eat : public Action
  {
  void Act(int i)
  {
  cout<<"No. "< 
  }
  };
  class TestAction
  {
  public:
  void TestAct(int i, Action& testAct)
  {
  testAct(i);
  }
  };
  int main(int argc, char* argv[])
  {
  TestAction doact;
  doact.TestAct(0, Drink());
  doact.TestAct(1, Drink());
  doact.TestAct(2, Drink());
  doact.TestAct(0, Eat());
  doact.TestAct(1, Eat());
  doact.TestAct(2, Eat());
  return 0;
  }
  雖然傳遞函數指針被廣泛應用于事件驅動系統中,以此實現回調函數通過指針來調用。但 C++ 還是提供了另外一種可供選擇的辦法,即函數對象,利用它可以避免使用函數指針。這樣做有幾個優點。首先, 因為對象可以在內部修改而不用改動外部接口,因此設計更靈活,更富有彈性。函數對象也具備有存儲先前調用結果的數據成員。。 此外,編譯器可以內聯函數對象,從而進一步增強性能。函數對象可以具體表達依靠成員模板的通用算法 , 這些算法借助普通的函數指針難以完成。例用函數對象實現了一個通用的 Negation 算法操作:
以下是引用片段:
  #include "stdafx.h"
  #include 
  using namespace std;
  class Negate
  {
  public:
  template T operator()(T t) const
  {
  return -t;
  }
  };
  void Callback(int n, const Negate& neg) // 傳遞一個函數對象
  {
  n = neg(n); // 調用重載的 () 操作 來對 n 進行 negate 操作
  cout << n << endl;
  }
  int main(int argc, char* argv[])
  {
  // 調用方式一
  Callback(5, Negate());
  // 調用方式二
  Negate neg;
  cout << neg(9.99999) << endl;
  cout << neg(__int32(39999999)) << endl;
  return 0;
  }  STL 庫中定義了很多函數對象以供相關算法調用,如 模板化的函數對象 greater<> 或者 less<>:  vector vi;  //.. 填充向量  sort(vi.begin(), vi.end(), greater() );// 降序 (descending)  sort(vi.begin(), vi.end(), less() ); // 升序 (ascending)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品xxx| 亚洲成人黄色网址| 久久久伊人欧美| 韩曰欧美视频免费观看| 91精品国产亚洲| 视频一区视频二区国产精品| 成人国产精品久久久久久亚洲| 欧洲成人免费aa| 亚洲xxxx做受欧美| 欧美激情视频在线观看| 日韩av片免费在线观看| 日韩av免费网站| 欧洲成人在线观看| 欧美激情综合亚洲一二区| 国产成人一区二区三区| 日韩美女写真福利在线观看| 亚洲欧美另类国产| 国产成人自拍视频在线观看| 最近2019中文字幕一页二页| 欧美日韩国产一中文字不卡| 91超碰caoporn97人人| 91av在线播放视频| 亚洲综合日韩在线| 国产精品入口福利| 91色视频在线观看| 国产美女主播一区| 国产欧美一区二区白浆黑人| 成人激情春色网| 国产精品第三页| 成人福利免费观看| 久久久精品国产网站| 国产精品一区二区久久久| 精品亚洲aⅴ在线观看| 成人免费高清完整版在线观看| 91精品国产综合久久久久久久久| 国产美女久久精品香蕉69| 欧美视频一区二区三区…| 在线日韩日本国产亚洲| 欧美日韩xxxxx| 久久免费视频观看| 色综合导航网站| 久久久99免费视频| 欧美亚洲另类视频| 国产精品三级久久久久久电影| 色婷婷综合成人av| 91久久国产精品| 国产精品成人观看视频国产奇米| 国产精品久久久久久久一区探花| 97超级碰在线看视频免费在线看| 欧美日韩国产中文精品字幕自在自线| 久久伊人精品天天| 欧美日韩电影在线观看| 91在线网站视频| 欧美一级电影在线| 欧美性xxxx18| 国产精品久久久久久搜索| 国产精品亚洲综合天堂夜夜| 伊人久久综合97精品| 久久久久久久亚洲精品| 91精品视频观看| 97香蕉超级碰碰久久免费软件| 一区二区亚洲欧洲国产日韩| 久久久999国产精品| 欧美精品videos另类日本| 在线观看中文字幕亚洲| 亚洲精品久久久久久久久久久久| 国产福利精品在线| 在线精品视频视频中文字幕| 日韩欧美黄色动漫| 欧美国产乱视频| 色妞色视频一区二区三区四区| 这里只有精品在线播放| 色综合久久久久久中文网| 98精品国产自产在线观看| 亚洲精品中文字幕av| 国产精品日韩在线| 精品久久久在线观看| 久久久久久久亚洲精品| 欧美国产激情18| 亚洲人成毛片在线播放| 亚洲国产毛片完整版| 亚洲美女精品久久| 亚洲图片制服诱惑| 国产日韩视频在线观看| 日本午夜精品理论片a级appf发布| 欧美大尺度激情区在线播放| 国产美女高潮久久白浆| 欧美乱人伦中文字幕在线| 91久久久亚洲精品| 91在线色戒在线| 久久福利视频导航| 高清一区二区三区四区五区| 亚洲精品suv精品一区二区| 97视频在线观看亚洲| 久久久久久久久久久人体| yellow中文字幕久久| 日韩精品高清在线| 亚洲免费视频一区二区| 久久精品91久久香蕉加勒比| 日韩中文字幕在线播放| 日韩电影第一页| 深夜福利国产精品| 亚洲精品成人久久久| 欧美最猛性xxxxx免费| 欧美色视频日本高清在线观看| 午夜欧美大片免费观看| 国产欧美最新羞羞视频在线观看| 久久久久久久电影一区| 欧美日韩中国免费专区在线看| 久久人91精品久久久久久不卡| 久久久久在线观看| 欧美日韩亚洲精品一区二区三区| 国产午夜精品麻豆| 亚洲性线免费观看视频成熟| 久久这里有精品视频| 韩剧1988在线观看免费完整版| 亚洲精品美女在线观看| 亚洲亚裔videos黑人hd| 日韩一区二区在线视频| 国产成人精品a视频一区www| 色悠久久久久综合先锋影音下载| 欧美在线视频一区| 亚洲欧美日韩天堂一区二区| 欧美成人精品一区二区三区| 久久99久久亚洲国产| 色哟哟亚洲精品一区二区| 日本精品一区二区三区在线播放视频| 欧美精品性视频| 97在线视频一区| 大胆欧美人体视频| 亚洲欧美日韩图片| 日本不卡免费高清视频| 欧美日韩亚洲高清| 国产91色在线播放| 国产精品第七十二页| 久久九九国产精品怡红院| 日本中文字幕不卡免费| 亚洲日本aⅴ片在线观看香蕉| 欧美性猛交视频| 亚洲国产精久久久久久久| 国产精品狠色婷| 一区二区三区国产视频| 亚洲男人第一av网站| 日韩中文字幕在线视频播放| 欧美日韩国产麻豆| 欧美第一页在线| 欧美激情精品久久久久久久变态| 国产精品丝袜一区二区三区| 福利微拍一区二区| 久久综合国产精品台湾中文娱乐网| 欧美日在线观看| 国内精久久久久久久久久人| 中文字幕av一区中文字幕天堂| 亚洲激情第一页| 国产欧美亚洲视频| 国语对白做受69| 疯狂欧美牲乱大交777| 国产一区红桃视频| 青青在线视频一区二区三区| 欧美极品美女视频网站在线观看免费| 亚洲嫩模很污视频| 91精品国产一区| 一区二区成人av| 日韩在线视频导航|