您的位置:首页 > 编程语言 > C语言/C++

C++中的指针

2015-08-17 17:00 295 查看
1、指向对象的指针

在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。定义指向类对象的指针变量的一般表达式为:

类名* 对象指针名
如下例,定义一个Time类,再定义指向Time类的对象的指针p和对象t1。

Class Time

{

Public:

inthour;

intminite;

intsecond;

voidget_time();

};

Void Time::get_time()

{

Cout<<hour<<”:”<<minite<<”:”<<second<<endl;

}

Time * p;

Time t1;

P=&t1;

则可以通过对象指针访问对象和对象成员,

(*P).hour; //与t1.hour等价

p->.get_time(); //与t1.get_time()等价

2、指向对象数据成员的指针

定义指向对象数据成员的指针与定义指向普通变量的指针的方法相同。

数据类型名* 指针变量名


*p1;

p1=&t1.hour; //将对象t1的数据成员hour的地址赋给p1

cout<<*p1<<endl; //输出t1.hour的值

3、指向对象函数成员的指针

定义指向对象成员函数的指针与定义指向普通函数的指针是不同的,定义指向普通函数的指针:

数据类型名(*指针变量名)(参数列表)


void (*p) ( ); //p指向void型函数的指针变量

p=fun; //将fun函数的入口地址赋给p,p就指向了函数fun

(*p)( ); //调用fun函数

然而定义一个指向对象成员函数的指针则要复杂一些,如果模仿普通函数的定义,

P=t1.get_time;

编译将会出错!因为成员函数与普通函数的一个最根本区别:它是类中的成员。编译系统要求在3各方面都要匹配:(1)函数参数的类型和个数;(2)函数返回值类型;(3)所属的类。

因此应该采用如下形式定义:

数据类型名(类名::*指针变量名)(参数列表);


void (Time :: *p2)( );

p2=&Time::get_time;

4、This指针

对一个类定义多个对象,每个对象的数据成员都分别占有存储空间,但不同对象都调用同一个函数代码段。那么,当不同对象的函数成员应用函数成员时,怎么能保证引用的是所指定对象的数据成员?C++中是这样解决的:在每一个成员函数中都包含一个特殊的指针this,它是指向本类对象的指针,其值是当前被调用的成员函数所在的对象的起始地址。如当调用成员函数数t1.get_time时,编译系统就把对象t1的起始地址赋给this指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: