C++ 类的成员函数指针

class dog{
    int name;
public:
    dog();
    void printname();
};

dog::dog(){
    cout<<"dog构造"<<endl;
};

void dog::printname() {
    cout<<"dog"<<endl;
}

int nihao(){
    cout<<1<<endl;
    return 0;
}

int main() {
    int (*func)();//普通函数指针
    func=nihao;
    func();

    dog dog1;
    dog *dogptr = &dog1;
//    cout<<&dog1.printname;//报错,不能通过实例化对象获取其成员函数地址
    void (dog::*p)() = &dog::printname;//只能通过  &类名::函数名  的方式得到成员函数的函数指针,这个时候不涉及任何实例化的对象,注意这里的&**
    (dog1.*p)();//通过实例化的对象(this指针)使用成员函数指针
    (dogptr->*p)();//调用方式2
}

普通函数的函数名就是地址,而获取成员函数地址时,需要在前面加&,这一点容易忘
之所以要这样调用是因为
仅仅有类成员函数的内存起始地址是不够的
还要解决多重继承、虚继承而带来的类实例地址的调整问题
所以类成员函数指针在调用的时候一定要传入类实例对象
普通函数指针可以获取类中静态成员函数,赋值和上面的&dog::printname一致

原文链接: https://www.cnblogs.com/lxzbky/p/17066140.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ 类的成员函数指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/399861

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月14日 上午9:36
下一篇 2023年4月14日 上午9:36

相关推荐