C++指针直接调用类成员函数探讨
日期:2007年6月7日 作者: 查看:[大字体 中字体 小字体]-
摘要 本文分析了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;
} Photoshop教程 数据结构 五笔输入法专题 QQ病毒专题 共享上网专题 Google工具和服务专题 - [1] [2] [3] [4] 下一页
-
- C++指针直接调用类成员函数探讨 相关文章:
- ·C++指针直接调用类成员函数探讨
- C++指针直接调用类成员函数探讨 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:C++未来断想
下一篇:明确C++风格的类型转换的用法
精品推荐
热点TOP10
- ·C语言教程第六章:指针
- ·C/C++笔试、面试题目大汇总
- ·MSComm控件使用详解
- ·学生成绩管理系统实习
- ·飞机订票系统设计
- ·Windows下C语言网络编程快速入门
- ·c#.net连接access操作类
- ·进程调度模拟程序
- ·打字游戏
- ·C#基础概念二十五问
- ·makefile规则
- ·C语言的常用库函数使用方法分析及用途
- ·Windows编程基础 - 概述
- ·c语言中的结构(struct)和联合(union)简介
- ·C语言教程第五章:函数
- ·一个简单的链表程序
- ·GDB 的文档
- ·socket编程原理
- ·VC下调用ACM音频编程接口压缩Wave音频
- ·漫谈C++ Builder多线程编程技术
特别推荐
- ·C#基础概念二十五问
- ·利用C#远程存取Access数据库
- ·入门教程:实例详解C++友元
- ·C语言基础教程(三)输入输出函数及控制流程语句
- ·VC下调用ACM音频编程接口压缩Wave音频
- ·如何在C/C++中调用Java
- ·设计的一个计算器类的源代码,很简陋哦,请各位高手不要见笑!
- ·gSOAP中内存的使用
- ·Windows下C语言网络编程快速入门
- ·C语言教程第六章:指针
- ·漫谈C++ Builder多线程编程技术
- ·学生成绩管理系统实习
- ·用C#实现pdf文件的完整性验证
- ·将程序从托管扩展 C++ 迁移到 C++/CLI(1)
- ·链表的c语言实现(六)
- ·C语言库函数 (D类字母)
- ·用AVIFile函数制做AVI文件基本步骤
- ·利用C++实现的贪吃蛇游戏
- ·Windows API-GDI入门基础知识详解(3)
- ·C语言库函数 (C类字母)
