频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

C++指针直接调用类成员函数探讨

来源: 作者: 出处:巧巧读书 2006-05-11 进入讨论组
下一页 1 2 3 
摘要 本文分析了C++编程中用指针调用“类” 成员函数时出现的问题、原因及后果,讨论了一般函数指针和“类”成员函数指针的不同。得出结论: 任何指向“类”的成员函数指针,由于携带额外的所属对象信息,与一般的函数有根本的不同,不能直接用来进行函数调用。
此外,本文给出了几种间接调用类的成员函数的方法。本文所有代码在VC++6.0下编译通过。

  关键词 C++编程; 类; 成员函数; 函数指针; 函数调用

  在编程工作中常会遇到在一个“类”中通过函数指针调用成员函数的要求,如,当在一个类中使用了C++标准库中的排序函数qsort时,因qsort参数需要一个“比较函数”指针,如果这个“类”使用某个成员函数作“比较函数”,就需要将这个成员函数的指针传给qsort供其调用。本文所讨论的用指针调用 “类”的成员函数包括以下三种情况:

  (1).将 “类”的成员函数指针赋予同类型非成员函数指针,如:


  例子1



#include <stdlib.h>

typedef void (*Function1)( ); //定义一个函数指针类型。
Function1 f1;

class Test1
{
 public:
  //…被调用的成员函数。
  void Memberfun1( ){ printf("%s \n","Calling Test3::Memberfun2 OK");}; //
  void Memberfun2()
  {
   f1=reinterpret_cast<Function1>(Memberfun1);//将成员函数指针赋予f1。编译出错。
   f1();
  }
  //…
};

int main()
{
 Test1 t1;
 t1.Memberfun2();
 return 0;
}

  (2) 在一个“类”内,有标准库函数,如qsort, 或其他全局函数,用函数指针调用类的成员函数。如:

  例子2:

#include <stdlib.h>

class Test2
{
private:
int data[2];
//…
public:
//…
int __cdecl Compare(const void* elem1, const void* elem2) //成员函数。
{
printf("%s \n","Calling Test2::Memberfun OK");
return *((int*)elem1)- *((int*)elem2) ;
}

void Memberfun()
{
data[0]=2; data[1]=5;
qsort( data, 2, sizeof(int), Compare); //标准库函数调用成
//员函数。编译出错。
}

//…
};

int main( )
{
Test2 t2;
t2.Memberfun(); //调用成员函数。
return 0;

}
通告:http://www.qqread.com/cpp/p798108002.html 更多文章 更多内容请看C/C++技术专题专题,或进入讨论组讨论。
下一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章