在c++中类是抽象的,没有实际内存,而对象是具体,是占有内存的,因此对象有地址,存放对象的起始地址的指针变量就是指向对象的指针变量。对象中的成员也是占有内存的,所以,存放对象成员的起始地址的指针变量就是指向对象成员的指针变量。
1.指向对象数据成员的指针
int *p1; //定义指向整形数据的变量
p1 = &t1.hour; //把hour的地址赋给p1
cout<<*p1<<endl; //输出t1.hour的值
前提,hour是time类的公共的整形数据,则可以在类外通过指向对象数据成员的指针变量访问对象数据成员hour;
2.指向对象成员函数的指针
定义指向公用成员函数的指针变量的一般形式为
数据类型名 (类名::*指针变量名)(参数列表);
当它指向成员函数时,只需把公用成员函数的入口地址赋给一个指向公用成员函数的指针变量。
指针变量名=&类名::成员函数名
举例,用不同方法输出时间的时,分,秒
#include <iostream>
using namespace std;
class time
{
public:
time(int h,int m,int s):hour(h),minute(m),second(s) {}
void show();
int hour,minute,second;
};
void time::show()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main()
{
time t1(12,5,34); //定义time类对象t1并初始化
t1.show();
int *p=&t1.hour; //定义指向整形数据的指针变量p,并使p指向t1.hour
cout<<*p<<endl;
time *p2=&t1; //定义指向time类对象的指针变量p2,并指向t1
p2->show();
void (time::*p3)(); //定义指向time类公用函数的指针变量p3
p3=&time::show; //把公用函数的地址赋值给p3
(t1.*p3)(); //调用对象t1中p3所指的成员函数
return 0;
}