C++的成员指针定义方式与使用

本文详细介绍了C++中特有的成员指针概念,包括数据成员指针和成员函数指针的定义方式及其使用方法,并通过实例说明如何正确应用成员指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象的成员是要占用存储空间的,因此对象也是有指针的,因为C++非常强调类型安全和编译时检查,因此C++的指针一共被分为4类,而且之间不能随便转换

  1. 数据指针
  2. 函数指针
  3. 数据成员指针
  4. 成员函数指针

数据指针函数指针是普通指针,C语言里也有,而后面的两种,数据成员指针成员函数指针被称为成员指针,是C所没有而C++才有的。

成员指针是指向类的某一个成员的指针,它的类型与类的类型成员的类型有关,它只应用于类的非静态成员。(类的静态成员是为类所有,不属于任何对象,所以静态成员指针用的是普通指针。)

下面是成员指针的定义方式:

1.定义数据成员指针的一般定义形式:数据成员类型 类名::*指针变量名=成员地址初值;

        举个例子:String Data::*ptr_x=&Data::x;(其中x是类Data的数据成员,而这个数据成员是String类型的。)

2.定义成员函数指针的一般形式为:

  • 返回类型  (类名::*指针变量名) (形式参数列表) = 成员地址初值;
  • 返回类型  (类名::*指针变量名) (形式参数列表) const = 成员地址初值;

注意:定义成员函数指针时,必须确保在3个方面与它所指向的函数的类型相匹配

函数形参的类型和数目,包括成员是否为const(是否是常成员函数);

返回类型;所属类的类型。

举栗子:“char get() const”成员函数的指针可以这样定义和初始化:

  • char ( Data::*ptr_func ) ( ) const = &Data::get;//注意取地址符号&后面的get没有括号
  • 或者也可以这样,先为成员函数指针使用类型别名,例如:

        typedef char ( Data::*GETFUNC ) ( Data::index, Data::index ) const//Data::是类限定,index对应的函数参数的类型

        GETFUNC ptr_func = &Data::get;

说了数据成员指针和成员函数指针的定义方式,那么怎么使用呢?其实和普通指针的使用方式没啥区别,下面来看一段代码:


或许有同学会问,啰里啰嗦讲了这么多成员指针的知识,那么什么情况会用到成员指针呢?目前为止我还没找到特别合理的该用成员指针的地方,下面贴一张和大佬的聊天图....


下面是一个很好消化的栗子:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值