指向类型成员的指针
大约 2 分钟
指向类型成员的指针
普通成员变量
普通成员变量:我们定义指针指向类的成员变量,。而且。
class Test
{
public:
void func()//普通成员方法
{
cout << "call Test::func" << endl;
}
static void static_func()//静态成员方法
{
cout << "Test::static_func" << endl;
}
int ma;//普通成员变量
};
&Test::ma
类型编译器认为是加了类的作用域,因此我们定义指针时,也需要加上类的作用域,是类作用域里的整型变量。当访问ma时必须给前面加上对象。
在栈上定义一个对象
int main()
{
Test t1;//栈上
int Test::*p = &Test::ma;//普通指针指向整型成员变量
t1.*p = 20;
cout << t1.*p << endl;
return 0;
}
在堆上定义一个对象
int main()
{
Test *t2 = new Test();//堆上
int Test::*p = &Test::ma;//普通指针指向整型成员变量
t2->*p = 30;
cout << t2->*p << endl;
delete t2;
return 0;
}
静态成员变量
静态成员变量:。
class Test
{
public:
void func()//普通成员方法
{
cout << "call Test::func" << endl;
}
static void static_func()//静态成员方法
{
cout << "Test::static_func" << endl;
}
int ma;//普通成员变量
static int mb;//静态成员变量
};
int Test::mb;
int main()
{
int *p1 = &Test::mb;
*p1 = 40;
cout << *p1 << endl;
return 0;
}
指向普通成员方法的指针
Test t1;//栈上
Test *t2 = new Test();//堆上
//指向成员方法的指针
void (Test::*pfunc)() = &Test::func;
(t1.*pfunc)();
(t2->*pfunc)();
指向静态成员方法的指针
Test::static_func();