C++进阶 -类中成员和成员函数的动态调用
#include <iostream>
using namespace std;
class Transport
{
public:
Transport(double s,double w)
{
Speed=s;
Weight=w;
}
virtual ~Transport()
{
cout<<"in ~Transport!"<<endl;
}
void Move()
{
cout<<"in moving"<<"\nSpeed="<<Speed<<"\nWeight="<<Weight<<endl;
}
void setSpeed(double s)
{
Speed=s;
}
void setWeight(double w)
{
Weight=w;
}
double Speed;
double Weight;
};
typedef double Transport::*pdouble;//数字成员指针
typedef void (Transport::*pSub)(double);//带参成员函数指针
typedef void (Transport::*pMove)();//无参成员函数指针
void main()
{
Transport t(8.8,9.9);
//数字成员指针指向Speed;
pdouble pd=&Transport::Speed;
printf("pd=%d\n",pd);
cout<<"Speed="<<t.*pd<<endl;
//数字成员指针指向Weight;
pd=&Transport::Weight;
printf("pd=%d\n",pd);
cout<<"Weight="<<t.*pd<<endl;
Transport *pt=&t;
cout<<"调用带参成员函数指针指向setSpeed(double)"<<endl;;
pSub ps=&Transport::setSpeed;
(pt->*ps)(88.88);
cout<<"调用带参成员函数指针指向setWeight(double)"<<endl;;
pSub pw=&Transport::setWeight;
(pt->*pw)(99.99);
cout<<"调用无参成员函数指针指向Move()"<<endl;;
pMove pm=&Transport::Move;

using namespace std;
class Transport
{
public:
Transport(double s,double w)
{
Speed=s;
Weight=w;
}
virtual ~Transport()
{
cout<<"in ~Transport!"<<endl;
}
void Move()
{
cout<<"in moving"<<"\nSpeed="<<Speed<<"\nWeight="<<Weight<<endl;
}
void setSpeed(double s)
{
Speed=s;
}
void setWeight(double w)
{
Weight=w;
}
double Speed;
double Weight;
};
typedef double Transport::*pdouble;//数字成员指针
typedef void (Transport::*pSub)(double);//带参成员函数指针
typedef void (Transport::*pMove)();//无参成员函数指针
void main()
{
Transport t(8.8,9.9);
//数字成员指针指向Speed;
pdouble pd=&Transport::Speed;
printf("pd=%d\n",pd);
cout<<"Speed="<<t.*pd<<endl;
//数字成员指针指向Weight;
pd=&Transport::Weight;
printf("pd=%d\n",pd);
cout<<"Weight="<<t.*pd<<endl;
Transport *pt=&t;
cout<<"调用带参成员函数指针指向setSpeed(double)"<<endl;;
pSub ps=&Transport::setSpeed;
(pt->*ps)(88.88);
cout<<"调用带参成员函数指针指向setWeight(double)"<<endl;;
pSub pw=&Transport::setWeight;
(pt->*pw)(99.99);
cout<<"调用无参成员函数指针指向Move()"<<endl;;
pMove pm=&Transport::Move;
(pt->*pm)();
}