1)C++入门级小知识,分享给将要学习或者正在学习C++开发的同学。
2)内容属于原创,若转载,请说明出处。
3)提供相关问题有偿答疑和支持。
c++中新增类成员指针操作,为了访问方便,他是指向类的成员指针:
首先看一下成员变量指针:
另外的情况是:
定义方法:
成员类型 类名::*指针名=&类名::成员名;
对于成员变量指针可以指向任意相同类型的不同变量;
另外要是用 .* 或者是 ->*运算符去解引用,这个很好理解:
string A::* str = &A::m_str;
cout << a.*str << endl;
str是个指针,*str就是取得对象本身, a.*str就是从对象a中取得对象本身了;
对于类成员数据的定义方法要严格遵守上面的公式,如下的运用是错误的:
对于上面的定义:int A::* p = A::m_data;
按照我们的理解是:既然p是指针那么m_data本身也是指针,但是这个无法成立,无法遵守上面的公式定义(成员类型 类名::*指针名=&类名::成员名;);
对于静态成员,由于静态成员不属于类中的成员,因此,对于静态成员类型的成员使用方法与一般的普通的成员指针一样,只是加一个类的限定如:(&A::m_data):
下面看一下成员函数指针:
对于一般的成员函数指针同样的问题是需要加类的作用域限定符;
定义的一般形式是:
void (A::*fun)(int) = &A::set; //&号不能省略,与c不同
引用的一般形式是:
(a.*fun)(200); //注意的是(a.*fun)是需要括号的
对于特殊的静态成员函数指针,同样时函数不在类中,使用方式和一般的函数指针使用方式一样: