跳至主要內容

指向类型成员的指针

张威大约 2 分钟c/c++类和对象

指向类型成员的指针

普通成员变量

普通成员变量:我们定义指针指向类的成员变量,。而且

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();