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

来源:互联网 发布:mac新版itunes添加铃声 编辑:程序博客网 时间:2024/06/10 03:28

                                                              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;}