blic:
example(int n, int m)
{
x=n;
y=m;
}
int get_x()
{ return x;}
int get_y()
{ return y;}
private:
int x,y;
};
main()
{
example op[4]={
example(1,2),
example(3,4),
example(5,6),
example(7,8)
};
int i;
example *p;
p=&op[3]; // 取出最后一个数组元素的地址
for (i=0;i<4;i++)
{
cout<<p->get_x()<<‘ ‘;
cout<<p->get_y()<<"\n";
p--; // 指向前一个数组元素
}
cout<<"\n";
return 0;
}
7 8
5 6
3 4
1 2
指向类的成员的指针
类的成员自身也是一些变量、函数或者对象等。因此,也可以直接将它们的地址存放到一个指针变量中,这样就可以使指针直接指向对象的成员,进而可以通过指针访问对象的成员。
可在类外定义指向类的成员的指针来控制对象的成员。
注意:
- 指向成员的指针只能访问公有数据成员和成员函数。
- 使用要先声明,再赋值,然后访问。
(1)指向数据成员的指针
- 声明: 类型说明符 类名:: *数据成员指针名
- 赋值: 数据成员指针名=&类名:: 数据成员名
- 使用
- 对象名. *数据成员指针名
- 对象指针名->*数据成员指针名
【例3.9】 访问对象的公有数据成员的几种方式
#include<iostream.h>
class A{
public:
A(int i) { z=i; }
int z;
};
void main()
{
A ob(5);
A *pc1; // 声明一个对象指针pc1
pc1=&ob; // 给对象指针pc1赋值
int A∷*pc2; // 声明一个数据成员指针pc2 // ①
pc2=&A∷z; // 给数据成员指针pc2赋值 // ②
cout<<ob.*pc2<<endl; // 用成员指针pc2访问数据成员z
cout<<pc1->*pc2<<endl; // 用成员指针pc2访问数据成员z
cout<<ob.z<<endl; // 使用对象名访问数据成员z
}
(2)指向成员函数的指针
- 声明: 类型说明符 (类名∷ *指针名)(参数表);
- 赋值: 成员函数指针名 = 类名∷成员函数名;
- 使用
- (对象名.*成员函数指针名)(参数表);
- (对象指针名 -> *成员函数指针名) (参数表);
【例3.10】 访问对象的公有成员函数的几种方式
#include<iostream.h>
class Coord {
public:
Coord(int a=0,int b=0) { x=a; y=b; }
int getx() { return x; }
int gety() { return y; }
private:
int x,y;
};
void main()
{
Coord op(5,6);
Coord *pc1=&op;
int (Coord∷*pc_getx)();
pc_getx=Coord∷getx;
cout<<pc1->getx()<<endl;
cout<<op.getx()<<endl;
cout<<(op.*pc_getx)()<<endl;
cout<<(pc1->*pc_getx)()<<endl;
}