目录
3.5 对象指针
3.5.1 指向对象的指针
一个对象存储空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的地址,这就是指向对象的指针变量。
定义指向类对象的指针变量的一般形式为:
类名 * 对象指针名
3.5.2 指向对象成员的指针
对象有地址值,存放对象的起始地址的指针变量就是指向对象的指针变量。对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。
1.指向对象数据成员的指针
定义指向对象成员函数的指针变量的一般形式为:
数据类型名 * 指针变量名;
int *p;
2.指向对象成员函数的指针
定义普通函数的指针变量的方法
类型名(*指针变量名)(参数列表);
void (*p) ();
指针变量的类型必须与赋值号右侧函数的类型相匹配:(三个方面)
(1)函数参数的类型和参数个数
(2)函数返回值的类型
(3)所属的类。(区别于普通函数的指针变量的定义)
定义指向公用函数的指针变量的一般形式为
数据类型名(类名::* 指针变量名)(参数列表);
void (Time :: *p)();
使指针变量指向一个公用成员函数的一般形式为
指针变量名=&类名::成员函数名;
p2=&Time :: get_time;
例题:用对象指针方法输出时分秒
#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);
int* p1 = &t1.hour;
cout << *p1 << endl;
t1.get_time();
Time* p2 = &t1;
p2->get_time();
void (Time:: * p3)();//定义指向Time类公用成员函数的指针变量p3
p3 = &Time::get_time;//使p3指向Time类公用函数get_time
(t1.*p3)();//调用对象t1中p3所指的成员函数
return 0;
}
成员函数不是存放在对象的空间中的,而是存放在对象外的空间中的。
3.5.3指向当前对象的this指针
不同的对象都调用同一个函数的目标代码。
在每一个成员函数中都包含一个特殊的指针,这个指针的名字是钩钉的,称为this。
它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。
this指针是隐式使用的,它是作为参数被传递给成员函数的。
本来成员函数volume的定义是
int Box:: volume ()
{return (height*width*length)};
C++把它处理为:
int Box:: volume (Box*this)
{return (this->height*this->width*this->length)};