<六>指向类成员的指针
指向类成员(成员变量和成员方法)的指针
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() { ; } ...
随机推荐
- SSH免密登录的配置
ssh登录 登录ssh一般情况有两种方法 密码登录 秘钥登录(免密) 大部分情况我们选择都是输入密码登录,平常使用暂时没有遇到什么问题.最近我编写了一些使用scp来传输文件的脚本,每一次scp都需要输 ...
- Mysql 实现 向上递归查找父节点并返回树结构
需求:通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构. 如果只有叶子,剔除掉; 如果只有根,只 ...
- 利用c++编写bp神经网络实现手写数字识别详解
利用c++编写bp神经网络实现手写数字识别 写在前面 从大一入学开始,本菜菜就一直想学习一下神经网络算法,但由于时间和资源所限,一直未展开比较透彻的学习.大二下人工智能课的修习,给了我一个学习的契机. ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(23)-Fiddler如何优雅地在正式和测试环境之间来回切换-上篇
1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...
- 【学习笔记】前馈神经网络(ANN)
前言 最近跟着<神经网络与深度学习>把机器学习的内容简单回顾了一遍,并进行了一定的查缺补漏,比如SVM的一些理解,one-hot向量,softmax回归等等. 然后我将继续跟着这本书,开始 ...
- centos7.2 安装MongoDB
1.配置阿里云yum仓库 #vim /etc/yum.repos.d/mongodb-org-4.0.repo [mngodb-org] name=MongoDB Repository baseurl ...
- 使用 systemd 定时器代替 cron 作业
转载自:https://mp.weixin.qq.com/s/HpDVp1sNYve8b7OdoHdGNw 创建一个定时器 首先,创建一个运行基础东西的简单的服务,例如 free 命令.举个例子,你可 ...
- CentOS7.9 yum方式安装redis最新版
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum --enablerepo=remi ins ...
- kibana安装安装插件
命令语法:bin/kibana-plugin install <package name or URL> 当您指定的插件名没有带 URL,插件工具将会尝试去下载 Elastic 官方插件. ...
- nsis插件nsisSlideshow.dll更新
更新至1.7版本,作者wiz0u已解决关于ie9的兼容问题.Good 下载地址: http://wiz0u.free.fr/prog/nsisSlideshow/latest.php