指向数据成员的“指针”并非指针。
#include <iostream>
using namespace std;
class A{
public:
A(){
//do nothing here.
}
A(int num,double num2){
this->num=num;
this->num2=num2;
}
int num;
double num2;
};
int _tmain(int argc, _TCHAR* argv[])
{
A* pA=new A(5,6);
int A::* p=&A::num; //p是一个指针,指向A的一个int成员
double A::*p1=&A::num2;
cout<<p<<endl; //输出偏移量 而不是地址
cout<<p1<<endl;
//通过偏移量访问数据成员
cout<<pA->*p<<endl;
cout<<pA->*p1<<endl;
delete pA;
return 0;
}
指向成员函数的指针并非指针:
#include <iostream>
using namespace std;
class A{
public:
void function( int num);
bool function1()const;
virtual bool function2() const=0;
};
class B:public A{
public :
bool function2()const;
};
int _tmain(int argc, _TCHAR* argv[])
{
void (A::* p)(int)= &A::function; //不是地址,而是一个指向成员函数的指针
bool (A::* p1)()const =&A::function1; // 指向成员函数的指针可以指向一个常量成员函数
// B b;
// A *a=&b;
// (a->*p1)();
// (b.*p1)();
return 0;
}

