-> 指向结构体成员运算符
. 结构体成员运算符
补充成员函数指针用法:
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()<
cout<< p_obj->GetVal()<
cout<< (p_obj->*p_func)()<
}
//输出结果:
5
8
8
#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<
}
void WhenDidItHappen(DayDATE *p)
{int i ;
cout<<"请输入今天日期和时间:"<
p->today=(enum day)i;
cout<<"输入年"<
cout<<"输入月"<
cout<<"输入日"<
switch(p->today)
{ case 0:cout<<"星期天"<
}
. 结构体成员运算符 ,而-> 指向结构体成员运算符 与指向结构的指针一起用
运算符“.*”和“->*”,用于“成员指针”。
首先有 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 的,但外面仍然可以修改。