当前位置: 首页 > news >正文

网站点击弹出下载框 怎么做商城类型的网站怎么做

网站点击弹出下载框 怎么做,商城类型的网站怎么做,网站建设收费标准新闻,网站设计哪家比较好http://blog.csdn.net/lisonglisonglisong/article/details/38353863 函数指针#xff08;function pointer#xff09;是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多#xff0c;而对指向类成员函数的函数指针则比较陌生。我最近也被问…http://blog.csdn.net/lisonglisonglisong/article/details/38353863 函数指针function pointer是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多而对指向类成员函数的函数指针则比较陌生。我最近也被问到了这方面的问题心中却也没有清晰的答案。故决定去查阅资料并按照自己的思路写下这篇学习总结。 一、普通函数指针 通常我们所说的函数指针指的是指向一般普通函数的指针。和其他指针一样函数指针指向某种特定类型所有被同一指针运用的函数必须具有相同的形参类型和返回类型。 [cpp] view plain copy int (*pf)(int, int);   // 声明函数指针   这里pf指向的函数类型是int (int, int)即函数的参数是两个int型返回值也是int型。注*pf两端的括号必不可少如果不写这对括号则pf是一个返回值为int指针的函数。 [cpp] view plain copy #includeiostream   #includestring   using namespace std;      typedef int (*pFun)(int, int);  // typedef一个类型      int add(int a, int b){       return ab;   }      int mns(int a, int b){       return a-b;   }      string merge(const string s1, const string s2){       return s1s2;   }      int main()   {       pFun pf1  add;         cout  (*pf1)(2,3)  endl;  // 调用add函数       pf1  mns;       cout  (*pf1)(8,1)  endl;  // 调用mns函数       string (*pf2)(const string, const string)  merge;       cout  (*pf2)(hello , world)  endl;  // 调用merge函数       return 0;   }   如示例代码直接声明函数指针变量显得冗长而烦琐所以我们可以使用typedef定义自己的函数指针类型。另外函数指针还可以作为函数的形参类型实参则可以直接使用函数名。 二、成员函数指针 成员函数指针member function pointer是指可以指向类的非静态成员函数的指针。类的静态成员不属于任何对象因此无须特殊的指向静态成员的指针指向静态成员的指针与普通指针没有什么区别。与普通函数指针不同的是成员函数指针不仅要指定目标函数的形参列表和返回类型还必须指出成员函数所属的类。因此我们必须在*之前添加classname::以表示当前定义的指针指向classname的成员函数 [cpp] view plain copy int (A::*pf)(int, int);   // 声明一个成员函数指针   同理这里 A::*pf 两端的括号也是必不可少的如果没有这对括号则pf是一个返回A类数据成员int型指针的函数。注意和普通函数指针不同的是在成员函数和指向该成员的指针之间不存在自动转换规则。[cpp] view plain copy pf  A::add;   // 正确必须显式地使用取址运算符   pf  A::add;    // 错误   当我们初始化一个成员函数指针时其指向了类的某个成员函数但并没有指定该成员所属的对象——直到使用成员函数指针时才提供成员所属的对象。 下面是一个成员函数指针的使用示例 [cpp] view plain copy class A;   typedef int (A::*pClassFun)(int, int);  // 成员函数指针类型      class A{   public:       int add(int m, int n){           cout  m      n      mn  endl;           return mn;       }       int mns(int m, int n){           cout  m   -   n      m-n  endl;           return m-n;       }       int mul(int m, int n){           cout  m   *   n      m*n  endl;           return m*n;       }       int dev(int m, int n){           cout  m   /   n      m/n  endl;           return m/n;       }          int call(pClassFun fun, int m, int n){   // 类内部接口           return (this-*fun)(m, n);       }   };      int call(A obj, pClassFun fun, int m, int n){   // 类外部接口       return (obj.*fun)(m, n);   }      int main()   {       A a;       cout  member function call:  endl;       a.call(A::add, 8, 4);       a.call(A::mns, 8, 4);       a.call(A::mul, 8, 4);       a.call(A::dev, 8, 4);       cout  external function call:  endl;       call(a, A::add, 9, 3);       call(a, A::mns, 9, 3);       call(a, A::mul, 9, 3);       call(a, A::dev, 9, 3);       return 0;   }   如示例所示我们一样可以使用 typedef 定义成员函数指针的类型别名。另外 我们需要留意函数指针的使用方法 对于普通函数指针是这样使用 (*pf)(arguments) 因为要调用函数必须先解引用函数指针而函数调用运算符()的优先级较高所以 (*pf) 的括号必不可少对于成员函数指针唯一的不同是需要在某一对象上调用函数所以只需要加上成员访问符即可 [cpp] view plain copy (obj.*pf)(arguments)         // obj 是对象   (objptr-*pf)(arguments)     // objptr是对象指针    三、函数表驱动 对于普通函数指针和指向成员函数的指针来说一种常见的用法就是将其存入一个函数表function table当中。当程序需要执行某个特定的函数时就从表中查找对应的函数指针用该指针来调用相应的程序代码这个就是函数指针在表驱动法中的应用。 表驱动法Table-Driven Approach就是用查表的方法获取信息。通常在数据不多时可用逻辑判断语句if…else或switch…case来获取信息但随着数据的增多逻辑语句会越来越长此时表驱动法的优势就体现出来了。 [cpp] view plain copy #includeiostream   #includestring   #includemap   using namespace std;      class A;   typedef int (A::*pClassFun)(int, int);      class A{   public:       A(){    // 构造函数初始化表           table[]  A::add;           table[-]  A::mns;           table[*]  A::mul;           table[/]  A::dev;       }       int add(int m, int n){           cout  m      n      mn  endl;           return mn;       }       int mns(int m, int n){           cout  m   -   n      m-n  endl;           return m-n;       }       int mul(int m, int n){           cout  m   *   n      m*n  endl;           return m*n;       }       int dev(int m, int n){           cout  m   /   n      m/n  endl;           return m/n;       }       // 查找表调用相应函数       int call(string s, int m, int n){           return (this-*table[s])(m, n);       }   private:       mapstring, pClassFun table;  // 函数表   };      // 测试   int main()   {       A a;       a.call(, 8, 2);       a.call(-, 8, 2);       a.call(*, 8, 2);       a.call(/, 8, 2);       return 0;   }   上面是一个示例示例中的“表”通过map来实现当然也可以使用数组。表驱动法使用时需要注意一是如何查表从表中读取正确的数据二是表里存放什么如数值或函数指针。
http://www.yutouwan.com/news/238371/

相关文章:

  • 公司网站域名注册2023年最火简约装修全屋
  • 中国建设银行官网站e路护下载网络架构需求
  • 重庆那些网站平面设计与网页设计培训
  • 高端网站建设怎么做中国最受欢迎的网站
  • 做水果的有什么网站百度上海总部
  • 抖音评论点赞自助网站链接提交
  • 住房与城乡建设部网站网站版式分类
  • 网站开发的推荐参考书内部网站建设方案
  • 网站项目怎么做的免费制作自己的微网站吗
  • fusion做电影网站卡死wordpress按照视频
  • 公司网站备案号wordpress投稿功能
  • 网站建设建设公司用vs做购物网站下载
  • 前端个人网站怎么做今天秦皇岛最新通知公告
  • 辽宁省建设工程质量监督总站网站珠海在线网站建设
  • 山西省建设监理协会官方网站哈尔滨网站建设网络公司
  • c2c电子商务网站需具备哪些业务功能必要是什么网站
  • 随州网站设计开发方案h5响应式网站建设价格
  • 天津网站优化首页微信公众号平台官网
  • php做网站页面建设公司网站大概需要多少钱
  • 长春网站建设q479185700強wordpress 用户密码的加密算法
  • 网站建设模板图片wordpress安装插件502
  • 网站流量的转换率一般是多少温州自助建站公司
  • 做股权众筹的网站零基础建设网站视频
  • 网上做中考题的网站深圳seo爱好者
  • 如何快速更新网站快照做lol数据的网站有哪些
  • 免费制作网站和网页wordpress转换语言
  • 如何提高网站的收录量广州网站建设年底促销
  • 无水印视频素材下载免费网站濮阳网站设计
  • 做古风文字头像的网站wordpress多語言插件
  • 建立一个公司的网站吗怎么创建免费网站