类成员函数指针

原创 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

相关文章推荐

C++类成员函数指针2

  • 2012年11月17日 16:54
  • 4KB
  • 下载

c++ 成员函数指针

  • 2010年04月11日 11:39
  • 9KB
  • 下载

C/C++开发语言系列之---C++类成员函数指针

http://blog.csdn.net/maojudong/article/details/8194143

类的非静态成员函数指针详解

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx 个人感觉对于类的成员函数指针这块讲解的比较深入详细 推荐阅读 ///...

类的成员函数指针(比较深入)

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx个人感觉对于类的成员函数指针这块讲解的比较深入详细推荐阅读//////...

类的成员函数指针(比较深入)

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx 个人感觉对于类的成员函数指针这块讲解的比较深入详细 推荐阅读 ...

C++类成员函数指针解析

类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的 普通函数指针的传递只要在参数声明中声明是相同参数个数、类型和相同返回类型的函数指针,可是传递类成员函数指针用此方法却不能工...

Function Pointer of class member function (类的成员函数指针)

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx个人感觉对于类的成员函数指针这块讲解的比较深入详细推荐阅读//////...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类成员函数指针
举报原因:
原因补充:

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