1.指向对像的指针
在建立对像时,编译系统会为每一个对像分配一定的存储空间,以存放其成员,对像空间的起始地址就是
对像的指针。可以定义一个指针变量,用来存和对像的指针。如果有一个类:
class Time
{
public:
int hour;
int minute;
int sec;
void get_time();
};
void Time::get_time()
{
cout << hour << ":" << minute << ":" << sec << endl;
}
在此有以下语句:
Time *pt;//定义pt 为指向Time类对像的指针变量
Time t1;//定义t1为Time类对像
pt=&t1;//将t1的起始地址赋给pt
这样,pt 就是指向Time类对象的指针变量,它指向对象t1。
定义指向类对象的指针变量的一般形式为:
类名 *对象指针名;
可以通过对象指针访问对象和对象的成员。如:
*pt pt所指向的对像,即t1
(*pt).hour pt所指向的对象中的hour成员,即t1.hour
pt->get_time() pt把指向的对象中的get_time函数,即t1.get_time()
(*pt).get_time()
2.指向对象成员的指针
a.指向对象数据成员的指针
定义指向对象数据成员的指针的方法与定主指向变通的指针变量的方法相同。如:
int *p;
定义指向对象数据成员的指针变量的一般形式为:
数据类型名 *指针变量名;
b.指向对象成员函数的指针
定义指向对象成员函数的指针变量的方法和定义指向变通函数的指针变量方法有所不同。
定义指向变通函数的指针变量的方法:
数据类型名 (*指针变量名)();如:
void (*p)();//p是指向void型函的指针变量
定义指向成员函的指针:
数据类型名 (类名::*指针变量名)();
使指针变量指向一个公用成员函数的一般形式为
指针变量名=&类名::成员函数名;
示例:
#include <iostream>
using namespace std;
class Time
{
public:
Time(int ,int ,int );
int hour;
int minute;
int sec;
void get_time();
};
Time::Time(int h,int m,int s)
{
hour = h;
minute= m;
sec = s;
}
void Time::get_time()
{
cout << hour << ":" << minute << ":" << sec << endl;
}
int main()
{
Time t1(10,13,56); //定义Time类对象t1
int *p1=&t1.hour;//定义指向整型数据的指针变量p1,并使p1指向t1.hour
cout << *p1 << endl;
t1.get_time();//调用对象t1的成员函数get_time()
Time *p2=&t1;//定义指向Time类对象的指针变量p2,并使p2指向t1
p2->get_time();//调用p2所指向对象的get_time()函数
void (Time::*p3)();//定义指向Time类公用成员函数get_time
p3 = &Time::get_time;//使p3指向Time类公用成员函数get_time
(t1.*p3)();//调用对象t1中p3所指的成员函数
return 0;
}