首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

成员函数指针成为可调用对象

成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象。     ...的成员函数指针类型 int main() {     pClassF pf= &A::print; // 定义成员函数指针,不支持函数指针的自动转换     A a;     (a....),function判断如果是成员函数指针,则会将通过该对象使用成员访问运算符,实现成员函数指针的调用功能(具体function如何判断是成员函数指针还是普通函数指针,本人现在不清楚,如果有理解错误地方望指正...的成员函数指针类型 int main() {     auto pf= &A::print; // 定义成员函数指针,不支持函数指针的自动转换     A a;          // void ...、_n等 using pClassF = void (A::*)() const; // 声明A的成员函数指针类型 int main() {     auto pf= &A::print; // 定义成员函数指针

1.1K40

C++成员指针

成员函数指针的定义格式: 成员函数返回类型 (名::*指针名)(形参)= &名::成员函数成员指针使用示例: #include #include using...*memP)(); } 程序正常运行并输出: name:lvlv 使用成员函数指着注意两点: (1)使用成员函数指针时需要指明成员函数所属的对象,因为通过指向成员函数指针调用该函数时,需要将对象的地址用作...this指针的值,以便进行函数调用; (2)为成员函数指针赋值时,需要显示使用&运算符,不能直接将名::成员函数名赋给成员函数指针。...成员数据指针 一个对象生成后,它的某个成员变量的地址实际上由两个因素决定:对象的首地址和该成员变量在对象之内的偏移量。成员数据指针是用来保存的某个成员数据在对象内的偏移量的。...要解决这个问题,将函数printArray()设置为ArrayClass的友元函数是不行的,因为是在调用该函数是访问了ArrayClass的私有成员,而不是在函数体内用到ArrayClass的私有成员

1.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ 成员指针

    成员指针分为成员函数指针和数据成员指针。 2.成员函数指针 在事件驱动和多线程应用中被广泛用于调用回调函数。在多线程应用中,每个线程都通过指向成员函数指针来调用该函数。...成员函数指针的定义格式: 成员函数返回类型 (名::*指针名)(形参)= &名::成员函数成员指针使用示例: #include #include using...*memP)(); } 程序正常运行并输出: name:lvlv 使用成员函数指着注意两点: (1)使用成员函数指针时需要指明成员函数所属的对象,因为通过指向成员函数指针调用该函数时,需要将对象的地址用作...this指针的值,以便进行函数调用; (2)为成员函数指针赋值时,需要显示使用&运算符,不能直接将“名::成员函数名”赋给成员函数指针。...要解决这个问题,将函数printArray()设置为ArrayClass的友元函数是不行的,因为是在调用该函数时访问了ArrayClass的私有成员,而不是在函数体内用到ArrayClass的私有成员

    78830

    C++的this指针,静态成员,友元函数友元

    ---- 1. this指针 在上篇讲C++中,对象,封装,继承(派生),多态的时候,this指针出现在成员函数中,并使用->成员提取符操作成员变量。...在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址,this 指针是所有成员函数的隐含参数,实际上成员函数默认第一个参数为T* const register this,this指针成员函数的开始执行前构造的...,它可以用来指向调用对象,并且只可以在成员函数中调用,对于全局函数,静态函数,友元函数,都不能使用this指针。...所以this指针不能在静态函数中使用,静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用...友元函数友元 所谓友元函数,就是在中,用friend关键字声明一个函数,这个函数的声明在中,但不作为成员函数,虽然友元函数不属于成员函数,却可以访问中的成员,不论成员是public,pirvate

    1.5K10

    指向数据成员指针

    在C++中,可以定义一个指针,使其指向成员成员函数,然后通过指针 来访问成员。这包括指向属性成员指针和指向成员函数指针。它类似与static成员函数成员变量,具有共享的属性。...每一个实例化的对象都可以借助指向数据成员指针来访问指向的数据。...所以我们还是一样要通过成员函数来操作,同样,成员函数一样可以拥有一个属于自己的指针。...*pf)(); (ps3->*pf)(); getchar(); return 0; } 以上均是指向非静态成员成员指针,而指向静态成员指针则非常简单。...●指向静态成员函数指针 指向静态成员函数指针和普通指针相同,在定义时无须和相关联,在使用时也 无须和具体的对象相关联。

    15610

    C++成员函数 | 成员函数

    C++成员函数的性质 在C++中,成员函数函数的一种,它有返回值和函数类型,它与一般函数的区别只是:  属于一个成员,出现在体中。...C++在使用函数时,要注意调用它的权限以及它的作用域,私有的成员函数只能被本类中的其他成员函数所调用,而不能被外调用,成员函数可以访问本类中任何成员,可以引用在本作用域中有效的数据。 ...这种函数的作用是支持其他函数的操作,是中其他成员函数外用户不能调用这些私有的函数。  成员函数体中十分重要的部分。...C++外定义成员函数 上述所讲成员函数是在体中定义的,在C++中也可以在体中只写成员函数的声明,而在的外面进行函数定义。...虽然函数的外部定义,但在调用成员函数时会根据在中声明的函数原型找到函数的定义,从而执行该函数

    1.9K74

    C++:33---成员指针

    成员指针概述: 当初始化一个这样的指针时,我们令其指向的某个成员,但是不指定该成员所属的对象 直到使用成员指针时,才提供成员所属的对象 成员指针是指可以指向的非静态成员指针 一般情况下,指针指向一个对象...,但是成员指针指向的是成员,而不是的所创建出的对象 的静态成员不属于任何对象,因此无需特殊的指向静态成员指针,指向静态成员指针与普通指针没有任何区别 成员指针的类型囊括了的类型以及成员的类型...->contents 返回数据成员指针函数 在上面定义成员指针的时候,pdata不能出现在Screen的外部,因为contents是private的(上面只是为了演示说明) 为了体现封装性,我们通常定义一个成员函数...*或者->*运算符作用域指向成员函数指针,来调用成员函数 例如: //pmf为成员函数指针,指向于get_cursor()函数auto pmf = &Screen::get_cursor;//pmf2...通过上面我们知道,想要调用成员函数指针,必须通过一个配合.

    87730

    【C++】C++ 中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ 中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 中 , 定义了 void fun(int...; 代码示例 : class Student { public: // 使用 const 修饰 成员函数 // const 关键字可以 // 在 void fun(int age, int...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 对象中的 任何成员变量 ; class Student { public: void fun..." << endl; } // 使用 const 修饰 成员函数 // const 关键字可以 // 在 void fun(int age, int height) 之后 , 大括号之前..." << endl; } ~Student() { cout << "执行 Student 的析构函数" << endl; } // 使用 const 修饰 成员函数 // const

    20120

    【C语言笔记】函数指针作为结构体成员

    函数指针在C语言中的意义 在C语言程序中,数据结构和算法是两个基本的元素。C语言的基本数据类型、结构体、数组和联合体是数据结构的代表;C语言中的函数则是算法的代表。...函数指针的应用 函数指针在嵌入式中的应用非常广泛,常常把函数指针作为结构体的成员、作为函数的参数等。如在物联网操作系统RT-Thread内核源码中,有如下代码: 1、函数指针作为结构体成员 ?...2、函数指针作为函数的参数 举例说明 建立一个结构体,用于四则运算(根据函数指针的指向可以选择加法运算、减法运算、乘法运算、除法运算),如 typedef int (*fun_t)(int, int);...add2; result = data.operation(data.a, data.b); printf("加法运算: %d+%d = %d\n",data.a, data.b, result); 函数指针...以上就是函数指针作为结构体成员的笔记,如有错误欢迎指出!

    3.5K30

    C++的静态数据成员和静态成员函数

    静态成员函数 一般都是在静态成员函数中修改静态数据成员,在刚刚的手机声明中的成员函数: static void change(); 就是静态成员函数。...我们给它来一个外定义: void redmik30pro::change() { battery-=10; } 要注意的是,静态成员函数只能访问静态数据成员和静态成员函数,不能访问非静态数据成员,如果要访问非静态数据成员...但是非静态成员函数可以任意地访问静态成员函数和静态数据成员。 那静态成员函数存在的意义是什么?...首先,可能你在做题的时候,题目要求你使用静态成员函数完成任务…… 开个玩笑啦…… 静态成员函数没有this指针,因为它在创建的时候就存在了,在没有创建对象的时候就已经存在静态成员函数,而普通函数必须在对象被创建的时候才能被使用...简而言之,静态成员函数是服务于的,而不是某个对象,它的方便在于不需要定义对象就能使用。

    17930

    VC和GCC成员函数指针实现的研究(三)

    image.png 图十七:VC多重虚继承的取成员变量和虚基成员变量 GCC虚继承成员函数指针实现 同样,赋值部分没什么特别的,和前面都一样。...经过测试,GCC在空虚基成员函数指针调用和非空虚基不同,我们直接上调用的汇编。...用foo_c的指针去调用foo_b的成员函数的时候是需要对指针值做些offset修正的。 然而 获取成员函数指针成员函数调用是分开的场景。...可以把基成员函数当成子类成员函数来取地址(&foo_c::print)。 在2发生之后,如果用子类指针去调用这个“伪”子类成员函数指针时,子类的指针值需要转换成基指针值。...所以必须要靠成员函数指针把这个offset存> 下来。 你可以试下把子类成员函数指针转换为基成员函数指针,如果这个基不是子类的第一父,转换过程必然会导致修正这个offset值。

    81010

    VC和GCC成员函数指针实现的研究(二)

    、接上一篇 VC和GCC内成员函数指针实现的研究(一) 接下来是多重继承,用到的测试代码如下所示: #include #include #include <algorithm...*ptr)(); return 0; } VC多重继承成员函数指针实现 image.png 图八:VC多重继承的指针赋值操作 赋值的部分和单继承是一样的。...GCC多重继承成员函数指针实现 image.png 图十二:GCC多重继承的函数指针赋值 哈,GCC的多重继承的赋值部分也和单继承一样,那么调用呢?...image.png 图十三:GCC多重继承的函数指针调用 如上图所示,比单继承多了两行,第一行是调整虚表地址到foo_b,这点和VC一样。后面增加的add指令是调整成员函数的this指针地址。...下一篇 VC和GCC成员函数指针实现的研究(三)

    68620

    C++:30 ---C++成员成员函数的内存布局

    前面两篇文章我相信大家反复读了之后对这节不陌生了: 首先来看代码: class Demo { public: //静态成员变量 static const int sx = 0; //静态函数...static void SF1() { } public: //成员变量 int x; public: //成员函数 void F1() { cout << "I'm...endl; cout << "Demo类型实例的大小 :" << sizeof(Demo) << endl; Demo* pObj = new Demo(); cout << "对象指针变量的地址是...这里要指出的是大家可以看到静态成员函数和静态成员变量sx的地址都是0x00007FF开头的,实际上他们都在全局数据区域存储(全局变量,静态变量),如果你有耐心,可以断点查看下栈空间内的局部变量i的地址:...我想你现在根据刚才打印的成员变量,成员函数,虚函数表地址已经可以自己画出成员的内存布局了。

    1.2K20

    C++声明和成员函数定义 | 引用多个成员对象

    C++声明和成员函数定义的分离 在C++中,一般做法是将的声明放在指定的头文件中,程序员如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写的声明,以减少工 作量,提高编程的效率。 ...由于在头文件中包含了的声明,因此在程序中就 可以用该类来定义对象,由于在体中包含了对成员函数的声明,在程序中就可以调用这些对象的公用成员函数。...C++库有两种:  C++编译系统提供的标准库 自定义库,用户根据自己的需要做成的用户库, 提供给自己和自己授权的人使用。...C++库包括两个组成部分: 声明头文件 已经过编译的成员函数的定义,它是目标文件。 案例:C++引用多个对象的成员。...以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C++声明和成员函数定义 | 引用多个成员对象 更多案例可以go公众号:C语言入门到精通

    1.9K83
    领券