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

如标题,想知道两个运算符是什么意思,怎么用,请高人告知。
2024-10-30 14:16:50
推荐回答(4个)
回答1:

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

回答2:

补充成员函数指针用法:
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()<p_obj->*p = 8;//对m_val赋值
cout<< p_obj->GetVal()<TDoGetVal p_func = TBase::GetVal;
cout<< (p_obj->*p_func)()<return 0;
}
//输出结果:
5

8
8

回答3:

#include
struct date
{ int year;
int month;
int day1;
};
enum day {sun, mon, tue, wed, thu, fri, sat};
struct DayDATE
{enum day today;
struct date mday;
};
void WhenDidItHappen(DayDATE *);
int main()
{ DayDATE myday;
WhenDidItHappen(&myday);
cout<return 0;
}
void WhenDidItHappen(DayDATE *p)
{int i ;
cout<<"请输入今天日期和时间:"< cout<<"输入数字"<>i;
p->today=(enum day)i;
cout<<"输入年"< cin>>p->mday.year;
cout<<"输入月"< cin>>p->mday.month;
cout<<"输入日"<cin>>p->mday.day1;
switch(p->today)
{ case 0:cout<<"星期天"< case 1:cout<<"星期一"< case 2:cout<<"星期二"< case 3:cout<<"星期三"< case 4:cout<<"星期四 "< case 5:cout<<"星期五"< case 6:cout<<"星期六"< }
}
. 结构体成员运算符 ,而-> 指向结构体成员运算符 与指向结构的指针一起用

回答4:

运算符“.*”和“->*”,用于“成员指针”。
首先有 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 的,但外面仍然可以修改。