<六>指向类成员的指针
指向类成员(成员变量和成员方法)的指针
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;
}
<六>指向类成员的指针的更多相关文章
- c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别
一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...
- C++类成员指针(指向类成员的指针)
1.指向类的数据成员的指针: 声明格式如下: <类型说明符> <类名>::* <指针变量名>; 2.指向类的成员函数的指针: 声明格式如下: <类型说明符 ...
- C++ 指向类成员函数指针的用法(转自维基百科)
类成员函数指针 类成员函数指针(member function pointer),是C++语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息. 目录 1 语法 ...
- C++ 必知必会:条款15 成员的指针并非指针
指向类成员的类成员的指针说是“指针”,其实是不合适的,因为他既不包含地址,其行为也不像指针 常规的指正,包含地址,对其解应用可以得到该指针包含地址所指向的对象 1: int a = 12: 2: in ...
- 成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...
- 类成员函数指针 ->*语法剖析
在cocos2d-x中,经常会出现这样的调用,如 ->*,这个是什么意思呢,如下面得这个例子: , 其实这是对类的成员函数指针的调用,在cocos2dx中,这种形式多用于回调函数的调用.如我们经 ...
- C++ 类的成员函数指针 ( function/bind )
这个概念主要用在C++中去实现"委托"的特性. 但现在C++11 中有了 更好用的function/bind 功能.但对于类的成员函数指针的概念我们还是应该掌握的. 类函数指针 就 ...
- 从汇编看c++成员函数指针(二)
下面先看一段c++源码: #include <cstdio> using namespace std; class X { public: virtual int get1() { ; } ...
随机推荐
- identity4 系列————纯js客户端案例篇[四]
前言 前面已经解释了两个案例了,通信原理其实已经很清楚了,那么纯js客户端是怎么处理的呢? 正文 直接贴例子哈. https://github.com/IdentityServer/IdentityS ...
- SpringMVC 06: 日期类型的变量的注入和显示
日期处理和日期显示 日期处理 此时SpringMVC的项目配置和SpringMVC博客集中(指SpringMVC 02)配置相同 日期处理分为单个日期处理和类中全局日期处理 单个日期处理: 使用@Da ...
- C语言的几个入门关于函数调用练习
1.找素数(素数:除了1和本身之外不能被任何整数整除的的数)(被某数整除=除以某数是整数) 问题:输出2到200(包括2和200)的使有素数,从小到大排序. 思路:检查所有比i小的数,取余. 涉及的知 ...
- java多线程实例程序实现与思想
写程序之前要了解两个概念 1.什么是进程 2.什么是线程 搞清楚这两个概念之后 才能写好一个合适而不会太抽象的程序 对进程和线程的理解见链接: https://blog.csdn.net/new_te ...
- MySQL8配置文件
- Python 类型提示简介
Python 3.6+ 版本加入了对"类型提示"的支持. 这些"类型提示"是一种新的语法(在 Python 3.6 版本加入)用来声明一个变量的类型. 通过声明 ...
- k8s日志架构和基本日志
如果一个容器崩溃了.一个Pod被驱逐了.或者一个节点停机了,您通常仍然需要访问您应用程序的日志.为此,您需要一个生命周期与节点.Pod.容器相对独立的存储空间来存储应用程序日志和系统日志. 此时,我们 ...
- EasyExcel实现文件导入
导入 准备工作 见:https://www.cnblogs.com/wywblogs/p/16095576.html 异步导入 接口代码 public Map importMemberList(@Re ...
- jmeter录制登录脚本
1.添加代理服务器 在非测试元件添加http代理服务器,端口写8888,域写127.0.0.1 在排除模式里填入.*.(js|css|PNG|jpg|ico|png|gif|woff|ttf).* 2 ...
- C#-2 C#程序
一 C#程序是一组类型声明 C#程序或DLL的源代码是一组一种或多种类型声明. 对于可执行程序,类型声明中必须有一个包含Main方法的类. 命名空间是一种把相关的类型声明分组并命名的方法.是类在程序集 ...