C++:指向对象成员函数的指针

在具体介绍指向成员函数的指针之前先简单介绍一下指向成员函数的指针与指向普通函数的指针的区别

指向成员函数的指针不仅要匹配将要指向的函数的参数类型,个数和返回值类型,还要匹配指向的成员函数所属的类

指向普通函数的指针变量定义如下:

      返回值类型    (* 指针名)();

而指向成员函数的指针的定义如下:

     返回值类型     (类名::*指针名)();

指向成员函数的指针的初始化:

   指针名=&类名::函数名;

指向成员函数的指针的调用:

   (对象名.*指针名)();

看一个具体的程序来开始理解:

#include<iostream>
using namespace std;
class Box
{
    public:
         Box(float l,float w,float h):length(l),width(w),height(h)
         {

         }
         float volume()
         {
             return length*width*height;
         }
         float area()
         {
             return 2*(length*width+length*height+width*height);

         }
    private:
        float length,width,height;
};
int main()
{
    Box box(1,2,3);
    float (Box::*p)();   //声明指向成员函数的指针:可以把(Box::*p)看做只是用来存放函数名称的指针,后面的()正好与函数名后面的括号相对应
    p=&Box::volume;      //初始化指向成员函数的指针:看到了吧,哲理只是把函数名的地址赋值给指针
    cout<<"The volume of box is:"<<(box.*p)()<<endl; //指向成员函数的指针的调用:(box.*p)只是相当于函数名称
    float (Box::*q)();
    q=&Box::area;
    cout<<"The area of the box is:"<<(box.*q)()<<endl;
    return 0;
}

 

注意:

1.在对指向成员函数的指针初始化时要把类的函数赋值给指针,而不是把对象的函数赋值给指针

  如 p=&box::volume 是错误的

2.调用指向成员函数的指针时,要通过(对象名.*指针),而不是(类名.*指针)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值