1.指向类的成员函数的指针
(1)定义的一般形式:数据类型 (类名:: * 指针变量名)(参数表列)
(2)使成员函数指针指向类的共用成员函数的一般形式:函数指针名=&类名::函数名
(3)利用函数指针调用类的成员函数一般形式:(对象名 . 函数指针名)()
#include<iostream>
using namespace std;
class Time
{
public:
Time(int h, int m, int s)
{
hour=h;
min = m;
sec = s;
}
void get_time();
private:
int hour;
int min;
int sec;
};
void Time::get_time()
{
cout << hour << ":" << min << ":" << sec<<endl;
}
int main()
{
Time t1(19,11,0);
**Time *p1;//定义一个指向对象的指针变量
//*p1 = t1;
p1 = &t1;//将对象t1的地址赋给指针变量*p1;
(*p1).get_time();//用指针变量调用类的成员函数
p1->get_time();//上同,这是调用类的成员函数的另一种方式
void (Time::*p2)();//定义一个指向类的成员函数的指针变量
p2 = &Time::get_time;//使指针变量指向类的公用成员函数
(t1.*p2)();//利用指针变量调用类的成员函数
return 0;**
}
``
说明:定义一个指向函数的指针变量,数据类型,以及参数表列要与它所指向的共用函数相对应,但同时别忘了忽视类名。
2.this指针
(1)在每一个成员函数中都包含一个特殊的指针(this指针),它是一种指向本类对象的指针,它的值是当前被调用的成员函数所在对象的起始地址。
显式使用如下:
#include<iostream>
using namespace std;
class Box
{
public:
Box(int w, int h, int l)
{
width = w; height = h; length = l;
}
void get_volume()
{
cout << this->height * this->width*this->length << endl;//this指针的显式使用
cout << (*this).height *(*this).width*(*this).length;//this指针的显式使用
}
private:
int width;
int height;
int length;
};
int main()
{
Box b(2, 3, 3);
b.get_volume();
}