| 数据指针 | T * |
| 成员数据指针 | T::* |
| 函数指针 | R (*)(...) |
| 成员函数指针 | R (T::*)(...) |
#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;
}
#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;
}
#include "stdlib.h"
class Test3
{
public:
//…
void Memberfun1( void (* f2)( ) ) { f2( ) ;} //成员函数1调用成员函数//2。
void Memberfun2( ) { printf("%s \n","Calling Test3::Memberfun2 OK");} //成员函数2。
void Memberfun3( ) { Memberfun1( Memberfun2);} // 编译出错
//…
};
int main( )
{
Test3 t3;
t3.Memberfun3(); //调用成员函数。
return 0;
}
error C2664: 'Memberfun1' : cannot convert parameter 1 from 'void (void)' to 'void (__cdecl *)(void)' None of the functions with this name in scope match the target type
#include <stdlib.h>
void Memberfun1( void (* f2)( ) ) { f2( ) ;} //原成员函数1调用成员函数//2。
void Memberfun2( ) { printf("%s \n","Calling Test3::Memberfun2 OK");} //原成员函数2。
void Memberfun3( ) { Memberfun1( Memberfun2);}
int main( )
{
Memberfun3 ();
return 0;
}
#include "stdafx.h"
#include <iostream>
#include <typeinfo.h>
class Test; //一个未定义的类。
class Test2 //一个空类。
{
};
class Test3 //一个有定义的类。
{
public:
//...
void (* memberfun)();
void Memberfun1( void (* f2)( ) ) { f2( ) ;} //成员函数1调用成员函数//2。
void Memberfun2( );//成员函数2。
//…
};
class Test4: virtual Test3 ,Test2 //一个有virtual继承的类(derivative class)。
{
public:
void Memberfun1( void (* f2)( ) ) { f2( ) ;}
};
class Test5: Test3,Test2 //一个继承类(derivative class)。
{
public:
void Memberfun1( void (* f2)( ) ) { f2( ) ;}
};
int main()
{
std::cout <<"一般函数指针长度= "<< sizeof(void(*)()) << '\n';
std::cout <<"-类的成员函数指针长度-"<<'\n'<<'\n';
std::cout <<"Test3类成员函数指针长度="<< sizeof(void(Test3::*)())<<'\n'<<'\n';
std::cout <<"Test5类成员函数指针长度="<<sizeof(void (Test5:: *)())<<'\n';
std::cout <<"Test4类成员函数指针长度="<<sizeof(void (Test4:: *)())<<'\n';
std::cout <<"Test类成员函数指针长度="<<sizeof(void(Test::*)()) <<'\n';
return 0;
}
class Test2
{
//….
int static __cdecl Compare(const void* elem1, const void* elem2) //成员函数。
//其他不变
}
class Test3
{
public:
//…
void static __cdecl Helper(Test3* test3)
{
test3->Memberfun2();
}
void Memberfun1( void (* f2)(Test3*)) { f2(this) ;} //将对象信息传给Helper函数。
void Memberfun2( ) {printf("%s \n","Calling Test3::Memberfun2 OK"); } //成员函数2。
void Memberfun3( ) { Memberfun1( Helper);}
//…
};
class Test3;
void __cdecl Helper(Test3* test3);
class Test3
{
public:
//…
void Memberfun1( void (* f2)(Test3*)) { f2(this) ;} //成员函数1调用成员函数//2。
void Memberfun2( ) {printf("%s \n","Calling Test3::Memberfun2 OK"); } //成员函数2。
void Memberfun3( ) { Memberfun1( Helper);}
//…
};
void __cdecl Helper(Test3* test3)
{
test3->Memberfun2();
};
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有