1.对象指针
声明形式:类名 *对象指针名;
例如:Point A(2,3); Point *ptr;ptr=&A;
通过指针访问对象成员:对象指针名-->成员名
ptr-->getX(); or (*ptr).getX();
2.this指针
定义:隐含于每一个类的成员函数中的特殊指针。
功能:明确地指出了成员函数当前所操作的数据所属的对象。
使用:当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函 数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针。
3.指向数据成员的指针
声明:(指向公有数据成员的指针)类型说明符 类名::*指针名;
(指向公有函数成员的指针)类型说明符 (类名::*指针名)(参数表);
(注意:通过指向成员的指针只能访问公有成员。)
分类:
指向数据成员的指针
【赋值:指针名=&类名::数据成员名;使用:对象名.*类成员指针名or对象指针名-->
类成员指针名】
指向函数成员的指针
【赋值:指针名=类名::函数成员名; 使用:(对象名.*类成员指针名)(参数表)or(对象指针名-->*类成员指针名)
(注意:成员函数指针的声明、赋值和使用过程中的返回值类型、函数参数表一定要相互匹配。)
】
总结:访问对象的公有成员函数的几种ways:
void main()
{ Point A(4,5);//声明对象A
Point *p1=&A;//声明对象指针并初始化
int (Point::*p_getX)()=Point::getX;//声明成员函数指针并初始化
cout<<(A.*p_getX)()<<endl;//1.使用成员函数指针访问成员函数
cout<<(p1->getX)()<<endl;//2.使用对象指针访问成员函数
cout<<A.getX()<<endl;//3.使用对象名访问成员函数
}
4.指向类的静态成员的指针(说明:对类的静态成员的访问不依赖于对象,因此可以用普通的指针来指向和访问静态成员。)
下面两个例子分别展示如何通过指针访问类的静态数据成员和静态函数成员嘿嘿嘿
#include<iostream>
using namespace std;
class Point{
public:
Point(int xx=0,int yy=0){X=xx;Y=yy;countP++;}//构造函数
Point(Point &p);
int getX(){return X;}
int getY(){return Y;}
static int countP;//静态数据成员引用性说明
private:
int X,Y;
};
Point::Point(Point &p)
{ X=p.X; Y=p.Y; countP++;}
int Point::countP=0;//静态数据成员定义性说明
void main()
{ int *count=&Point::countP;//声明一个int型指针,指向类的静态成员
Point A(4,5);//声明对象A
cout<<A.getX()<<" "<<A.getY()<<endl;
cout<<*count<<endl;//直接通过指针访问静态数据成员
}
#include<iostream>
using namespace std;
class Point{
public:
Point(int xx=0,int yy=0){X=xx;Y=yy;countP++;}//构造函数
Point(Point &p);
int getX(){return X;}
int getY(){return Y;}
static void getC(){cout<<countP<<endl;}
private:
int X,Y;
static int countP;//静态数据成员引用性说明
};
Point::Point(Point &p)
{ X=p.X; Y=p.Y; countP++;}
int Point::countP=0;//静态数据成员定义性说明
void main()
{
void (*gc)()=Point::getC;//指向函数的指针,指向类的静态函数成员
Point A(4,5);
cout<<A.getX()<<" "<<A.getY()<<endl;
gc();//通过指针访问类的静态函数成员gc();或者(*gc)();都可
}
嘿嘿嘿,这是Doris的第一篇博客,星光不负赶路人,需要改进的地方还有很多呀,加油吧嘿嘿。