首页 > 编程语言 >[C++] 成员函数指针和函数指针

[C++] 成员函数指针和函数指针

时间:2024-10-30 17:09:54浏览次数:3  
标签:get int 成员 C++ func 0x555555555229 函数指针 ptr

#include <iostream>

using namespace std;

class A {
public:
    A(int a) : _a(a) {}
    int _a;

    void* get_ptr() {return this;};
    void p(int c) {cout << "_a: " << _a << endl;};
};

int int_func(int a, float b) {
    return a+b;
}

int main() {
    A a(1);

    // this指针其实就是对象的地址,在实例化之前是没有this指针的
    cout << "a.get_ptr(): " << a.get_ptr() << endl;
    cout << "&a: " << &a << endl;

    printf ("get_ptr: %p\n", (void*)(&A::get_ptr));  
    printf ("p: %p\n", (void*)(&A::p));
    void* (A::*get_pt)() = &A::get_ptr;
    void (A::*p)(int) = &A::p;
    // 获取成员函数指针必须使用&符号,避免编译器认为你在调用函数。
    // 上面的代码中,`void*`是返回值,`A::`是作用域表示这个是A的成员函数,`*get_pt`是指针的变量名,之后的括号中是参数列表,

    int (*normal_func)(int, float) = &int_func;
    printf ("normal_func: %p\n", normal_func);
    printf ("int_func: %p\n", int_func);
    printf ("&int_func: %p\n", &int_func);
    // 对于普通函数,函数名即是地址,是否使用&结果是一样的
    // 成员函数指针必须使用&

    // 成员函数与具体的对象关联,当没有具体对象时,成员函数依旧存在于内存(你可以使用&A::get_ptr的方式获取到),但是没办法调用。

    printf ("call int_func: %d\n", normal_func(1, 2.5));
    return 0;
}

运行结果如下

a.get_ptr(): 0x7fffffffd9a4
&a: 0x7fffffffd9a4
get_ptr: 0x555555555496
p: 0x5555555554a8
normal_func: 0x555555555229
int_func: 0x555555555229
&int_func: 0x555555555229
call int_func: 3

标签:get,int,成员,C++,func,0x555555555229,函数指针,ptr
From: https://www.cnblogs.com/cjdty/p/18516185

相关文章

  • 【2024华为OD-E卷-200分-任务最优调度】(题目+思路+Java&C++&Python解析+在线测试)
    在线评测链接题目内容给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执行完所有任务所需的最短时间。任务执行规则如下:任务可以按任意顺序执行,且每个任务执行耗时间均为111个时间单位两个同类型的......
  • 【C++练习】找出100到200之间不能被3整除的所有整数
    题目:找出100到200之间不能被3整除的所有整数题目描述:编写一个C程序,要求遍历100到200(包括100和200)之间的所有整数,并输出其中不能被3整除的所有整数。每个整数之间用一个空格隔开,在输出完所有满足条件的整数后,输出一个换行符。输出要求:输出100到200之间不能被3整除的所有整数......
  • 【GiraKoo】C++编译中常用的内置宏
    开源项目:https://girakoo.com/联系方式:[email protected]简介针对不同的平台,很多头文件,函数名称,类型占用空间不一致。为了保证跨平台可编译,经常需要在项目中使用宏进行区分系统宏操作系统可使用的宏Windows32位_WIN32Windows64位_WIN32;_WIN64Linux__linu......
  • 【GiraKoo】C++中static关键字的作用
    C++中static关键字的作用在程序中良好的使用static,const,private等关键字,对于代码的健壮性有很大的帮助。本文介绍的就是C++中static关键字的一些常见用法与区别。适合萌新程序员理解static的作用。一、在类内修饰变量限制变量的存储位置(保存在静态区),所有类对象共享一份数据。......
  • 【GiraKoo】C++多线程消息分发架构
    【开源需求】C++多线程消息分发架构项目【gi_messager】在多线程环境中,为每个线程提供独立的消息队列MessageLoop。注:主线程默认自动创建消息队列。MessageLoopCenter提供MessageLoop的查询功能。能够获得指定MessageLoop的句柄。同一个MessageLoop可以绑定多个......
  • C++编程语言:从基础到高级
    C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化、面向对象和泛型编程。C++由丹麦计算机科学家BjarneStroustrup于1979年在贝尔实验室开始开发,最初作为C语言的扩展,称为“CwithClasses”。1983年,正式更名为C++。C++以其高效、灵活......
  • 将POJO类的成员全部设置为public多省事儿
    最近浏览一个项目的代码时发现,其中有一些以前提交的编码,定义的一些类(不管他是POJO、DTO、DAO、PO、BO、VO、QO、ENTITY还是就是个对象,不重要。总之就是数据传输对象。),这些类他的写法非常的潇洒,属性全部是public的,没有任何的get、set方法,看起来非常干净、整洁。比如基本都像下面这......
  • C++算法练习-day26——239.滑动窗口的最大值
    题目来源:.-力扣(LeetCode)题目思路分析题目:给定一个整数数组 nums 和一个整数 k,请找出该数组中所有长度为 k 的子数组中的最大元素,并返回这些最大元素组成的数组。思路:滑动窗口:这是一个典型的滑动窗口问题,其中窗口的大小为 k。我们需要遍历整个数组,同时保持一......
  • C++算法练习-day27——347.前k个高频元素
    题目来源:.-力扣(LeetCode)题目思路分析题目:找出数组中出现频率最高的前K个元素。这个问题要求我们从给定的数组nums中找出频率最高的前k个元素。这通常意味着我们需要统计每个元素的出现次数,然后根据这些次数进行排序,并提取前k个元素。以下是解决这个问题的思路:统计频率:首......
  • 探索C++的类与继承之美:从基础到高级
    C++是一种强大的面向对象编程语言,其特性允许开发者利用类和继承来构建复杂的数据结构和功能。在本篇博客中,我们将通过一些示例代码,详细解析C++中的类、继承、虚继承、访问控制以及多重继承的概念。类的定义与基本特性类是C++的基本构建块,允许我们定义一个新的数据类型,该类型......