六指向类成员的指针
导读:指向类成员(成员变量和成员方法 的指针 1:定义一个指针指向类的普通成员变量 示例代码1 点击查看代码 class Test2{ public: int ma; static int mb; void f1( {cou...
指向类成员(成员变量和成员方法)的指针
1:定义一个指针指向类的普通成员变量
示例代码1
点击查看代码class Test2{
public:
int ma;
static int mb;
void f1(){
cout"Test::void f1()"endl;
}
static void static_f(){
cout"Test::void static_f()"endl;
}
}
;
int Test2::mb=0;
int main(){
int *p = &
Test2::ma;
return 1;
}
上面 int *p = &
Test2::ma;
可以这样吗?
不可以, 编译报错 不可以将 int Test2::* 转为 int *
点击查看代码
需要这样定义
int Test2::*p = &
Test2::ma;
*p=30;
//这样操作没有意义,因为ma是需要基于对象的,所以需要这样
Test2 t;
int Test2::*p = &
Test2::ma;
t.*p=30;
或者
Test2 *pt=new Test2();
int Test2::*pp = &
Test2::ma;
pt->
*pp=40;
或者
int *p3=&
Test2::mb;
*p3=50;
2:定义一个函数指针指向类的成员函数
void (*pf)() = & Test2::f1(); 编译报错
要明确的指出pf是指向Test2类中函数的函数指针,如下
void(Test2::*pf)()=& Test2::f1();
如果通过函数指针调用函数?需要依赖对象,如下
Test2 t3;
Test2 p4=new Test2();
t3.pf();
//*解引用
(p4-> *pf)(); // *解引用
3:定义函数指针指向类的静态成员方法
void (pf2)() = &
Test2::static_f;
(pf2)();
完整示例代码如下
点击查看代码class Test2{
public:
int ma;
static int mb;
void f1(){
cout"Test::void f1()"this->
maendl;
}
static void static_f(){
cout"Test::void static_f()" mbendl;
}
Test2(int _ma):ma(_ma){
}
}
;
int Test2::mb=0;
int main(){
Test2 obj1(100);
Test2 *pObj2=new Test2(20);
//定义指针指向 类的普通成员变量
int Test2::*p = &
Test2::ma;
obj1.*p=1000;
pObj2->
*p=2000;
//定义指针指向 类的 静态成员变量
int *pStatic = &
Test2::mb;
*pStatic=9999;
//定义函数指针 指向 类的普通成员方法
void (Test2::*pf)()=&
Test2::f1;
(obj1.*pf)();
(pObj2->
*pf)();
//定义函数指针 指向 类的静态方法
void (*pf2)() = &
Test2::static_f;
(*pf2)();
return 1;
}
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 六指向类成员的指针
本文地址: https://pptw.com/jishu/1073.html