C++静态成员函数指针

C++的静态成员函数指针

 

先简单的说说非静态的成员函数。

非静态成员函数指针的类型:

    类的非静态成员是和类的对象相关的。也就是说,要通过类的对象来访问变量。

成员函数的类型定义为:

    typedef void (A::*pfunc)();

 A是一个类,有一个成员函数void test();

 使用:

    pfunc p = A::test;

 

示例:

[cpp] view plain copy

  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. class A {  
  6.   
  7. public :  
  8.   void test1() { cout << "test" << endl; };  
  9. public :  
  10.   
  11. };  
  12.   
  13. typedef void (A::*PFunc)();  
  14.   
  15. int main() {  
  16.   A a;  
  17.   PFunc f = &(A::test1);  
  18.   
  19.   (a.*f)();  
  20.   
  21.   system("PAUSE");  
  22.   return 0;  
  23. }  

 

 

 

需要注意的是因为成员函数地址的解引用必须要附驻与某个对象的地址,所以我们必须创建某个对象,来调用这个函数。

 

静态成员函数,可以通过类作用域符来访问。

静态成员函数的类型:静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。

typedef void (*pfunc) ();

这个和普通函数的指针是一样的。

使用的时候也可以像普通函数一样。

 

示例:

[cpp] view plain copy

  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. class A {  
  6.   
  7. public :  
  8.   static void test1() { printf("test\n"); };  
  9. public :  
  10.   
  11. };  
  12.   
  13. typedef void (*PFunc)();  
  14.   
  15. int main() {  
  16.   PFunc f = &(A::test1);  
  17.   
  18.   (*f)();  
  19.   
  20.   system("PAUSE");  
  21.   return 0;  
  22. }  

另外:静态成员的初始化不受访问控制的限制。              

根据C++primer所说,要想确保对象只定义一次,最好的办法就是把静态数据成员的定义和其他非内联函数的定义放在同一个文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下C语言连接Oracle数据库

为什么80%的码农都做不了架构师&#xff1f;>>> 最近公司有个项目需要用到Oracle数据库&#xff0c;我负责前期的调研。由于项目要用到C和PHP两种语言&#xff0c;所以先收集这两种语言连接Oracle的方法。PHP使用的是Laravel框架&#xff0c;直接使用了Laravel-OCI…

SU suspecfk命令学习

用suplane生成平面&#xff0c;并查看其FK谱&#xff0c; 水平反射界面经FK变换后&#xff0c;波数为0&#xff0c; 正好处于临界&#xff0c;乃奎斯特频率&#xff0c; 有空间假频&#xff0c; Over&#xff0c;不足之处&#xff0c;欢迎批评指正。 转载于:https://www.cnblog…

dblink查询_分库数据如何查询统计

分库后的计算不能直接使用SQL&#xff1b;异构库 SQL 函数不尽相同&#xff1b;JAVA 硬编码实施难度大&#xff1b;即使借助透明网关访问远程数据库&#xff0c;分库性能优化也是头疼问题。一般常规办法&#xff1a;方法1&#xff1a;java硬编码简单的跨库count运算&#xff0c…

python 爬取大乐透开奖结果

#codingutf-8 #下面中文注释不支持 所以开头加 "#codingutf-8" # 获取近期大乐透开奖结果, 并给出自己猜中的个数import requests# 这个API能够免费得到近期开奖结果, url里的-20代表获取近20期的开奖信息 url "http://f.apiplus.net/dlt-20.json" re…

【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

类的继承案例解析&#xff0c;python相关知识延伸 作者&#xff1a;白宁超 2016年10月10日22:36:57 摘要&#xff1a;继<快速上手学python>一文之后&#xff0c;笔者又将python官方文档认真学习下。官方给出的pythondoc入门资料包含了基本要点。本文是对文档常用核心要点…

课堂练习之小强大扫荡

标题&#xff1a;在将程序安装到新的手机上时会出现程序崩溃 解决&#xff1a;1、找出错误&#xff1a;经过一系列测试&#xff0c;发现问题出现在第一次访问数据库的代码时报错。错误原因为不能发现数据库中的建立的表。 2、如何解决&#xff1a;在主页面加入访问数据库语句。…

领域驱动设计:软件核心复杂性应对之道_人人都可以领域驱动设计(一)

最近几年&#xff0c;领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;这个术语越来越多地出现在软件工程师的视野里。对DDD不熟悉的人可能会觉得它是软件领域里的一个新的概念&#xff0c;但是实际上&#xff0c;Eric Evans在十几年前就已经提出了这…

linux 进程通信 消息队列

详解linux进程间通信-消息队列 前言&#xff1a;前面讨论了信号、管道的进程间通信方式&#xff0c;接下来将讨论消息队列。 一、系统V IPC 三种系统V IPC&#xff1a;消息队列、信号量以及共享内存&#xff08;共享存储器&#xff09;之间有很多相似之处。 每个内核中的 I P …

laravel框架——composer导入laravel

第一种&#xff1a;  composer create-project --prefer-dist laravel/laravel projectName "5.2.*"第二种&#xff1a;  composer global require "laravel/installer"  laravel new 名称转载于:https://www.cnblogs.com/xj76149095/p/5951822.html…

第七章 心得体会

通过第七章的学习&#xff0c;使自己对驱动程序的认识更加深刻&#xff0c;LED灯的驱动程序帮我我学到很多&#xff0c;还学会了驱动的移植。 学到的知识&#xff1a; 一、编写LED驱动 1、创建LED驱动的设备文件 第一步&#xff1a;使用cdev_init函数初始化cdev leds_cdev.owne…

wx.checkjsapi是写在config里面吗_用Python写一个程序,解密游戏内抽奖的秘密

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者&#xff1a; 极客挖掘机PS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun分析需求我们先整理下思…

Dev C++安装第三方库boost

Dev_C安装第三方库boost 安装步骤 准备工作下载boost库&#xff0c;下载地址https://sourceforge.net/projects/boost/1. 设置GCC的环境变量PATH 设置环境变量path,在其中加上DEV-C编译器的路径&#xff08;gcc.exe所在路径&#xff09;&#xff0c;如C:\Program Files (x86)…

bash的一些小技巧

1、从输入读入变量 eg:read -ep "input yes or no: " flag 用e选项表示编辑&#xff0c;可以使用backspace删除 2、数组 a、索引数组 declare -a arr(var1 var2 var3) 用空格分割&#xff0c;如果直接访问变量$arr&#xff0c; 则获取的是数组的第一个元素&#xff0…

golang switch_为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

点击上方“我要学编程”&#xff0c;选择“置顶/星标公众号”福利干货&#xff0c;第一时间送达&#xff01;来自 | C语言Plus请用5秒钟的时间查看下面的代码是否存在bug。OK&#xff0c;熟练的程序猿应该已经发现Bug所在了&#xff0c;在第13行下面我没有添加关键字break; 这就…

RabbitMQ 安装与简单使用

在企业应用系统领域&#xff0c;会面对不同系统之间的通信、集成与整合&#xff0c;尤其当面临异构系统时&#xff0c;这种分布式的调用与通信变得越发重要。其次&#xff0c;系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方&#xff0c;比如发送短信&#…

数据库函数依赖及范式

一、基础概念   要理解范式&#xff0c;首先必须对知道什么是关系数据库&#xff0c;如果你不知道&#xff0c;我可以简单的不能再简单的说一下&#xff1a;关系数据库就是用二维表来保存数据。表和表之间可以……&#xff08;省略10W字&#xff09;。   然后你应该理解以下…

windows svn

windows svn 1.1Svn和VisualSvn介绍 VisualSvn Server2.5.6&#xff08;版本控制服务器&#xff09;免费开源软件 是基于Windows平台上的Subversion服务器&#xff0c;它是免费的 官方下载&#xff1a; http://www.visualsvn.com/files/VisualSVN-Server-2.5.6.msi TortoiseSvn…

信息摘要技术及算法介绍

数据摘要算法是密码学算法中非常重要的一个分支&#xff0c;它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能&#xff0c;由于其不可逆性&#xff0c;有时候会被用做敏感信息的加密。 数据摘要算法也被称为哈希&#xff08;Hash&#xff09;算法、散列算法…

AutoLayout的那些事儿

AutoLayout非常强大也非常易用&#xff0c;可读性也很强&#xff0c;加上各种第三方AutoLayout库&#xff0c;让你布起局来犹如绷掉链子的狗&#xff01;根本停不下来&#xff01;以前的 1label.frame.origin.y label.frame.size.height 10如今只用&#xff1a; 123button.sn…

docker-compose下载慢_编写Docker Compose时要注意的五大常见错误

在构建容器化的应用时&#xff0c;开发人员往往需要某种方法来引导启动目标容器&#xff0c;以对其进行代码级别的测试。尽管业界有许多方法可以实现该目的&#xff0c;但Docker Compose是目前最受欢迎的一种方法。它能够让如下两个方面变得容易实现&#xff1a;指定在开发过程…