首页 > 编程语言 >C++ 类的成员函数指针

C++ 类的成员函数指针

时间:2023-01-24 16:24:35浏览次数:41  
标签:调用 函数 成员 dog 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一致

标签:调用,函数,成员,dog,C++,地址,函数指针
From: https://www.cnblogs.com/lxzbky/p/17066140.html

相关文章

  • C++之*与**与&的爱恨情仇
      一、解释*和&&在变量定义区,表示引用int&x;&在变量操作区,表示取地址符intx=10,*p=&x;*在变量定义区,表示指针int*x;*在变量操作区,表示解引用int*x;cout<<*x......
  • C++小例子【未更新完】
    题目目录​​题目1:全排列​​​​题目2:三数排序​​​​题目3:1+2+3+...+100=?​​​​题目4:大整数相加​​​​题目5:无零整数​​题目1:全排列全排列用1、2、3三个数字可......
  • 算法竞赛向 C++ Standard Library 使用速查
    因网络上STL教程大多零散且缺乏严谨性,本文对算法竞赛所需C++StandardLibrary做了一个较为全面的总结。全文主要参考以下文档:Containerslibrary-cppreference.c......
  • MAC平台上VSCode搭建C++开发环境遭遇问题
    Q1:c_cpp_properties.json文件中的macFrameworkPath参数配置​​官网​​上给定内容如下:{"configurations":[{"name":"Mac","includePath":["${workspa......
  • C++ 类中花括号 {} 换行的正确写法 All In One
    C++类中花括号{}换行的正确写法AllInOneC++Classcurlybraces{}&linebreakC++Class&ObjectC++类&对象[template-spec]class[ms-decl-spec][......
  • C++堆与栈【cherno课程学习】
    C++的堆与栈当我们程序开始的时,它被分成了一堆不同的内存区域,除了堆和栈还有很多东西,但我们最关心的两个就是堆和栈在应用程序启动后,操作系统要做的就是,他会将整个郑......
  • C++ STL unordered_map
    #include<unordered_map>头文件usingnamespacestd;作用无序map容器。以pair形式存储数据。pair在#include<utility>头文件中定义。pair:<key,value>pair其实就是数据......
  • 【速记】C++ STL自定义排序
    这篇笔记咱日后应该还会进行补充。关于sort的比较函数STL的algorithm库中的sort函数,可以接受一个cmp函数作为第三个参数,用来指定排序的规则。自定义sort比较函数cmp(a,......
  • C++左值右值
    lvalue:locatorvalue翻译为左值?可定位的值rvalue:readvalue翻译为右值?可读的值似乎放在等号左边的叫左值,右边的叫右值?lvaue是指存储在内存中、有明确存储地址(可寻址......
  • 侯捷 C++面向对象高级开发 上 && 下 视频全集下载
    关注公众号:红宸笑。回复:视频即可 ......