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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值