c++指向成员函数的指针好容易错啊!
#include <iostream>
using namespace std;class Time
{
public:
int hour,minute,sec;
Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s){}
void showtime()
{
cout<<"Now time:"<<hour<<":"<<minute<<":"<<sec<<endl;
}
};
int main()
{
Time t1(23,10,59);
int *p1=&t1.hour;
cout<<"*p1:"<<*p1<<endl;
t1.showtime();
Time *p2,t2;
p2=&t2;
p2->showtime();
void(Time::*p3)();
p3=&Time::showtime;
(t2.*p3)();
return 0;
}
主要看
void(Time::*p3)();
p3=&Time::showtime;
(t2.*p3)();
这几串代码。
第一行:定义指向Time类公用成员函数的指针变量p3,void是函数类型,(Time::*p3)是函数名,最后"()",表面这是个函数。
第二行:‘&’后面是函数名,也就是Time::showtime,千万别写成Time::showtime(),这样写就不是函数名了。
第三行:一定是(t2.*p3)();如果是t2.*p3();因为'()'和'.'运算优先级都比'*'要高,就会出现语法错误(指向p3()这个函数,然而不可能有这个函数)。
在这三行代码里面,一定要指明是哪个类(Time)的成员函数(通过'::'作用域运算符)