C++的两个运算符.*和->*

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:44:23
如标题,想知道两个运算符是什么意思,怎么用,请高人告知。

运算符“.*”和“->*”,用于“成员指针”。
首先有 class 或者 struct 定义,例如:

class CA
{
public:
int m_i0;
private:
int m_i1;
}

于是可以在这样定义“成员指针”:
int CA::* pm = &CA::m_i0;

当定义了 CA 的变量、指针,就可以使用上面两个运算符了,例如:
CA a;
CA * p = &a;

a.*pm = 5;
p->*pm = 6;

当然,在可以看到 m_i1 的地方(比如 CA 的成员函数中),还可以写:
pm = &CA::m_i1;
这样的话,外面用 a.*pm 就可以代替 a.m_i1 了,虽然是 private 的,但外面仍然可以修改。

-> 指向结构体成员运算符
. 结构体成员运算符

补充成员函数指针用法:
class TBase
{
public:
int m_val;
int GetVal(void) {return m_val;}
};
typedef int (TBase::*TDoGetVal)(void);
int main()
{
int TBase:: *p = &TBase::m_val;
TBase obj;
TBase *p_obj = new TBase;
obj.*p = 5; //对m_val赋值
cout<< obj.GetVal()<<endl;
p_obj->*p = 8;//对m_val赋值
cout<< p_obj->GetVal()<<endl;
TDoGetVal p_func = TBase::GetVal;
cout<< (p_obj->