#include <iostream>
using namespace std;
class TIME
{
public:
TIME(int h,int m,int s):hour(h),min(m),sec(s){};
//private:
void display();
//private:
int hour;
int min;
int sec;
};
void TIME::display()
{
cout<<hour<<":"<<min<<":"<<sec<<endl;
}
int main()
{
//使用带形参方式创建对象t1
TIME t1(12,34,56);
//定义pi为指向对象t1的成员变量hour的指针,继而用指针对其进行操作
int *pi=&t1.hour;
cout<<*pi<<endl;
//调用对象t1的成员函数
t1.display();
//定义pT为指向对象t1的指针
TIME *pT=&t1;
//用指针方式间接的调用对象的成员函数
pT->display();
//定义指向对象成员函数打指针p
void (TIME::*p)();
//给p赋值,指向成员函数打入口点
//p=&TIME::display() 错误的赋值方式
p=&TIME::display;
//利用指针p间接的调用其所指向打对象成员函数
(t1.*p)();
//以上三种方法都实现了调用对象t1的成员函数display
return 0;
}
可以看出对象成员函数的入口地址是用p=&TIME::display;即&类名::成员函数名,而不应该写成p=&t1::display;
因为对象打成员函数不是存放在对象的空间中的,而是存放在对象外的空间,如果有多个同类型打对象,他们共用同一个函数代码段,所以赋值给指针变量p的应该是这个共用的函数代码段打入口地址。