指向类成员(成员变量和成员方法)的指针

1:定义一个指针指向类的普通成员变量

示例代码1

点击查看代码
class Test2{

public:
int ma;
static int mb;
void f1(){cout<<"Test::void f1()"<<endl;}
static void static_f(){
cout<<"Test::void static_f()"<<endl;
}
}; int Test2::mb=0; int main(){
int *p = &Test2::ma;
return 1;
}

上面 int *p = &Test2::ma; 可以这样吗?
不可以, 编译报错 不可以将 int Test2::* 转为 int *

点击查看代码
    需要这样定义
int Test2::*p = &Test2::ma;
*p=30;//这样操作没有意义,因为ma是需要基于对象的,所以需要这样 Test2 t;
int Test2::*p = &Test2::ma;
t.*p=30; 或者
Test2 *pt=new Test2();
int Test2::*pp = &Test2::ma;
pt->*pp=40; 或者
int *p3=&Test2::mb;
*p3=50;

2:定义一个函数指针指向类的成员函数

void (*pf)() = &Test2::f1(); 编译报错

要明确的指出pf是指向Test2类中函数的函数指针,如下

void(Test2::*pf)()=&Test2::f1();

如果通过函数指针调用函数?需要依赖对象,如下

Test2 t3;

Test2 p4=new Test2();

t3.
pf(); //*解引用

(p4->*pf)();// *解引用

3:定义函数指针指向类的静态成员方法

void (pf2)() = &Test2::static_f;

(
pf2)();

完整示例代码如下

点击查看代码
class Test2{

public:
int ma;
static int mb;
void f1(){cout<<"Test::void f1()"<<this->ma<<endl;}
static void static_f(){
cout<<"Test::void static_f()"<< mb<<endl;
}
Test2(int _ma):ma(_ma){}
}; int Test2::mb=0; int main(){ Test2 obj1(100);
Test2 *pObj2=new Test2(20); //定义指针指向 类的普通成员变量
int Test2::*p = &Test2::ma;
obj1.*p=1000;
pObj2->*p=2000; //定义指针指向 类的 静态成员变量
int *pStatic = &Test2::mb;
*pStatic=9999; //定义函数指针 指向 类的普通成员方法
void (Test2::*pf)()=&Test2::f1;
(obj1.*pf)();
(pObj2->*pf)(); //定义函数指针 指向 类的静态方法 void (*pf2)() = &Test2::static_f;
(*pf2)(); return 1;
}

<六>指向类成员的指针的更多相关文章

  1. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  2. C++类成员指针(指向类成员的指针)

    1.指向类的数据成员的指针: 声明格式如下: <类型说明符> <类名>::* <指针变量名>; 2.指向类的成员函数的指针: 声明格式如下:   <类型说明符 ...

  3. C++ 指向类成员函数指针的用法(转自维基百科)

    类成员函数指针 类成员函数指针(member function pointer),是C++语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息. 目录 1 语法 ...

  4. C++ 必知必会:条款15 成员的指针并非指针

    指向类成员的类成员的指针说是“指针”,其实是不合适的,因为他既不包含地址,其行为也不像指针 常规的指正,包含地址,对其解应用可以得到该指针包含地址所指向的对象 1: int a = 12: 2: in ...

  5. 成员函数指针与高效C++委托 (delegate)

    下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...

  6. [Reprint]C++普通函数指针与成员函数指针实例解析

    这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下   C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...

  7. 类成员函数指针 ->*语法剖析

    在cocos2d-x中,经常会出现这样的调用,如 ->*,这个是什么意思呢,如下面得这个例子: , 其实这是对类的成员函数指针的调用,在cocos2dx中,这种形式多用于回调函数的调用.如我们经 ...

  8. C++ 类的成员函数指针 ( function/bind )

    这个概念主要用在C++中去实现"委托"的特性. 但现在C++11 中有了 更好用的function/bind 功能.但对于类的成员函数指针的概念我们还是应该掌握的. 类函数指针 就 ...

  9. 从汇编看c++成员函数指针(二)

    下面先看一段c++源码: #include <cstdio> using namespace std; class X { public: virtual int get1() { ; } ...

随机推荐

  1. 【Java】学习路径52-Timer计时器实例

    import java.util.Timer; import java.util.TimerTask; public class TimerClass { public static void mai ...

  2. win10+Android(华为)系统原生日历同步方案+Sol日历桌面显示

    前言:本文是参考了其他博客基础上,新增了Android的免费桌面[月试图显示]功能.以及适配于上海交通大学的Canvas教学日历.方便进行多设备同步的日历管理.任务提醒. 目录 1.效果展示 2.方案 ...

  3. Python入门系列(三)一学就会-基础数据类型

    数据类型 您可以使用type()函数获取任何对象的数据类型. x = 5 print(type(x)) 数字类型 x = 1 # int y = 2.8 # float z = 1j # comple ...

  4. wsl创建证书让chrome浏览器识别

    我在wsl里面测试http2协议的时候,在wsl用openssl创建了证书, 然后我把证书放在windows证书管理后,用chrome打开发现提示这个: 虽然可以点击下面的强制 访问 但是chrome ...

  5. git 根据历史 commitID 拉分支

    1. git log -g 查看已commit的信息 2. 根据commit信息找到对应的commitID 3. 执行一下命令来创建新的分支 ### 1. 方法一:创建一个基于commitId的分支, ...

  6. C#,根据路径获取某个数字开头的所有文件夹,并获取最新文件夹进行替换文件

    项目需求获取某路径下为1开头文件夹,并替换最新文件夹内容,话不多说,上代码 private void Form1_Load(object sender, EventArgs e) { try { st ...

  7. Python数据分析教程(二):Pandas

    Pandas导入 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用 两个数据类型:Series, Da ...

  8. Django ORM 实现数据的多表 增删改查

    一.创建模型和表 假定下面这些概念.字段与关系: 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,手机号,家庭住址信息. 作者详情模型 和 作者模型之间是一对一的关系(one- ...

  9. 小程序 AI/AR 能力

    一.关于 VisionKit 1.定义 VisionKit 为小程序提供了开发 AR 功能的能力,包含了 AR 在内的视觉算法. 2.版本 提供了 V1 和 V2 两个版本,区别如下: V1平面接口, ...

  10. MySQL5.6 & 5.7 配置 SSL

    mysql5.7上开启并配置ssl [root@mysqlmaster01 bin]# ./mysql_ssl_rsa_setup --datadir=/data/mysql_data1/ --use ...