C++ 对象指针(函数指针)

                                                              C++ 对象指针(函数指针)

1、指向对象的指针:

    对象的起始地址就是对象的指针,可以定义一个指针变量用来存放对象的指针;

class Time

{

public:

   int hour;

   int minute;

   int sec;

    

    

   void get_time();

    

};

void Time::get_time()

{

   cout<<hour<<":"<<minute<<":"<<sec;

    

}

Time *pt;    //定义pt为指向Time类对象的赋值指针变量

   Time t1;     //定义t1Time类的对象

   pt = &t1;    //t1起始地址赋给pt

 

   *pt 此时pt指向的对象已经是t1了;

   

   (*pt).hour 指向对象中的hour成员

   pt->hour;

   

2、指向对象成员的指针:

   

    指向对象数据成员:

 

   一般形式------数据类型名 *指针变量名;

  

   同上面的例子:他如果time是公用数据类型,就可以通过把time指定为指针

  在类外通过指针对象数据成员来访问hour

 

     pl = &t1.hour;

     cout<<*pl;

 

   指向对象成员函数的指针

 

   需要注意的是,定义执行对象成员函数的指针变量的方法,和定义普通函数的指针变量方法是不同的!!!

 

 

  普通函数指针变量定义

 

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

 

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

 

这样定义的函数指针变量可以用来指向一个函数,并且调用函数;

 

   p= fun;   //fun函数的入口地址赋值给指针变量p

 

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

 

  对象成员函数的使用就没有这么简单了,

首先来看一下成员函数和普通函数的区别;

 

成员函数是类的一个成员,指针变量的类型必须与赋值号右侧的函数类型相匹配

 

1、函数参数的类型韩参数个数;

2、函数返回值的类型

3、所属的类

综上所述定义对象成员函数的具体方法是

 

void TIme:: *p2();     //定义p2为指向time类中公有成员函数的指针变量

 

(Time:: *p2) 两侧的括号不能省略,因为()的优先级高于*

 

 定义成员函数的指针变量的一般形式为;

 

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

 

    可以让他指向一个公有成员函数,把成员函数的入口给他就可以了

比如:

  

   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=10,int m=20,int s=10)

{

   hour = h;

   minute = m;

   sec = s;

    

}

void Time::get_time()   //定义公有成员函数

{

   cout<<hour<<":"<<minute<<":"<<sec<<endl;;

    

}

 

 

int main (int argc, const char * argv[])

{

   Time t1(10,20,50);  //定义类对象

   int *p1 = &t1.hour; //定义整形数据的指针变量p1并使p1指向t1.hour

   cout<<*p1<<endl;

    

   t1.get_time();   //调用对象t1的成员函数get_time

   Time *p2 = &t1;  //定义指向time类的指针变量p2并指向t1;

   p2->get_time();

    

   void (Time::*p3)();   //定义指向time类公有成员函数p3;

   p3 = &Time::get_time; //p3指向类公有成员函数get_time

   (t1.*p3)();           //调用函数 

   return 0;

} 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值