类成员函数指针

原创 2006年06月04日 11:36:00

类成员函数指针的基本用法:

1。声明

已知简单的类声明如下:

class Screen
{

public:
 Screen(int curson = 0): m_curson(curson){}
 ~Screen(){}
 
public:
 Screen& forword(int num = 1) { m_curson += num; cout<<"forword called! "<<num<<endl; return *this;}
 Screen& back(int num = 1) { m_curson -= num; cout<<"back called! "<<num<<endl; return *this;}

private:

 unsigned int m_curson;
};

我们可以这样声明一个指向back成员函数的指针:

Screen& (Screen::*back_fun)(int para) = &Screen::back;

其中:

Screen& -函数返回值; int para-函数参数; back_fun - 函数指针名称;

&Screen::back - 类Screen成员函数back的地址

Screen::* 表示该指针是指向类Screen的函数成员指针

2. 使用方法也比较简单:

#include "screen.h"

Screen& (Screen::*back_fun)(int para) = &Screen::back;

void main()

{
Screen  myscreen, *pscreen; //注意:myscreen是类对象, 而pscreen是类指针
pscreen = &myscreen;

(myscreen.*back_fun)(10) ;
(pscreen->*back_fun)(20);

}

说明: 类成员函数指针的调用有两只方式:类对象+(.  *) 和 类指针+(->*) 其中*不可缺少

3。实际操作

类成员函数指针使用情况之一就是类中有多个并列的operaitons, 为了调用的方便,并实现信息隐藏我们使用类成员指针数组来实现。如下例:

#include <iostream>
using namespace std;

#pragma warning (once: 4514)

class Screen
{
 typedef Screen& (Screen::*Action)(int);

public:
 enum move_enum{forword_dir, backword_dir, moves};
 static Action actions[moves];

public:
 Screen(int curson = 0): m_curson(curson){}
 ~Screen(){}
 
public:

 Screen& move(move_enum dir, int para, int num)
 {
  for (int i = 0; i < num; ++i)
   (this->*actions[dir])(para);

  return *this;
 }

private:  //实现接口隐藏
 Screen& forword(int num = 1) { m_curson += num; cout<<"forword called! "<<num<<endl; return *this;}
 Screen& back(int num = 1) { m_curson -= num; cout<<"back called! "<<num<<endl; return *this;}

private:

 unsigned int m_curson;
};

Screen::Action Screen::actions[moves] = {&Screen::forword, &Screen::back};

void main()
{
 Screen myscreen;
 Screen* pScreen = & myscreen;

 myscreen.move(Screen::backword_dir, 5, 10);
 return;
}

从类设计的角度来说,screen类可能再增加诸如up, home等成员函数,但是我们外部使用接口myscreen.move 并不需要改变,这个外部接口是统一的,实现类访问接口简单化。以后维护代码时每增加一个move动作,我们需要做的工作是:

1)。添加 move_enum

2)。添加 actions[]

3)。定义 move_new

如何声明类成员函数指针?

比如: 有如下的一个类, 里面有一个成员函数 Func() class Test {      public:       int Func(void* param1, void* param2); ...
  • sunny04
  • sunny04
  • 2014年01月21日 15:28
  • 920

指向 类成员函数 的 函数指针

原文:http://www.vckbase.com/document/viewdoc/?id=1818一、成员函数指针的用法  在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以...
  • lqk1985
  • lqk1985
  • 2008年05月08日 19:18
  • 3508

如何使用指向类的成员函数的指针(详解!)

我们首先复习一下"指向函数的指针"如何使用?   void print()   {   }   void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 vo...
  • lishuhuakai
  • lishuhuakai
  • 2014年01月14日 22:13
  • 27107

C++如何声明类成员函数指针或类成员变量指针(A::*)

例如有如下类,class A { int mem; int* func(void) { //... } };怎么声明类A的成员函数指针或成员变量指针呢?...
  • yockie
  • yockie
  • 2016年06月30日 01:23
  • 2386

C++关于类成员函数指针的正确写法

关于类成员函数指针的正确写法 10-09 Web开发 Dante 10,735 一般来说,函数指针的用法是比较简单的。 比如对于函数: int innerFunc(i...
  • a511244213
  • a511244213
  • 2015年05月26日 16:02
  • 1348

c++ 全局函数指针和类成员函数指针

c++非类成员函数指针定义 void (*pfun
  • my_friend_ship
  • my_friend_ship
  • 2014年11月22日 16:36
  • 545

【解惑】函数名与函数指针(普通C/C++函数、C++类*静态*函数名取不取址都一样,但C++类成员函数必须取址)

【解惑】函数名与函数指针    今天在学习linux下c程序设计时,看到函数指针时,在书上看到一个例子如下: 1 int get_max(int i, int j, int k, int...
  • love_hot_girl
  • love_hot_girl
  • 2013年10月15日 16:19
  • 717

类的成员函数指针,类的静态成员函数指针

/* * File: main.cpp * Author: Vicky.H * */ #include void f1() { std::cout
  • eclipser1987
  • eclipser1987
  • 2012年08月31日 17:56
  • 2161

函数指针,成员函数指针,重载函数指针

指向函数的指针 函数的类型由它的返回值和参数列表决定, 但函数不能返回一个函数类型。 01 int fce( const char*, ... ); ...
  • ttomqq
  • ttomqq
  • 2014年05月30日 16:04
  • 796

C++学习之普通函数指针与成员函数指针

函数指针(function pointer)是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生。我最近也被问到了这方面的问题,心中...
  • lisong694767315
  • lisong694767315
  • 2014年08月03日 01:10
  • 2384
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类成员函数指针
举报原因:
原因补充:

(最多只允许输入30个字)