c++ 对象指针

c++指向成员函数的指针好容易错啊!


#include <iostream>

using namespace std;

class Time
{
    public:
        int hour,minute,sec;
        Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s){}
        void showtime()
        {
            cout<<"Now time:"<<hour<<":"<<minute<<":"<<sec<<endl;
        }
};

int main()
{
    Time t1(23,10,59);
    int *p1=&t1.hour;
    cout<<"*p1:"<<*p1<<endl;
    t1.showtime();
    Time *p2,t2;
    p2=&t2;
    p2->showtime();
    void(Time::*p3)();
    p3=&Time::showtime;
    (t2.*p3)();
    return 0;

}


主要看

    void(Time::*p3)();
    p3=&Time::showtime;
    (t2.*p3)();

这几串代码。

第一行:定义指向Time类公用成员函数的指针变量p3,void是函数类型,(Time::*p3)是函数名,最后"()",表面这是个函数。

第二行:‘&’后面是函数名,也就是Time::showtime,千万别写成Time::showtime(),这样写就不是函数名了。

第三行:一定是(t2.*p3)();如果是t2.*p3();因为'()'和'.'运算优先级都比'*'要高,就会出现语法错误(指向p3()这个函数,然而不可能有这个函数)。

在这三行代码里面,一定要指明是哪个类(Time)的成员函数(通过'::'作用域运算符)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值