c++中的类成员函数指针】的更多相关文章

下面讨论的都是类的非静态成员函数. 类成员函数指针的声明及调用: 1 2 3 4 5 6 7 //pr是指向Base类里的非静态成员函数的指针 //其行参为(int, int),返回值为void void (Base::*pr)(int, int);   //需通过对象调用 //object是Base类的一个对象或指针(可多态) ( object->*pr)( _r, _c) 而其实质和普通的指针也有区别: //下面是隐藏的代码是相关类型的定义 1 2 3 4 5 6 7 8 9 10 11 1…
类成员函数指针: 用于访问类成员函数,和一般函数指针有区别. 类成员函数处理的是类数据成员,声明类成员函数指针的同时,还要指出具体是哪个类的函数指针才可以.调用时也要通过对象调用. 而对于类的静态成员函数,它是类对象共享的,且只能处理静态数据成员,所以它的函数指针可以类似一般函数指针一样使用. class Test { public: void fun(int); void fun(int) const; //重载函数,加一个const限制 static void fun_static(int)…
普通函数指针:  "return_type (*ptr_name)(para_types) " 类成员函数指针: "return_type (class_name::*ptr_name)(para_types)" 类数据成员指针: "type class_name::* ptr_name"; C/C++: class Demo { public: Demo():data() { } int data; int show(int a,int b)…
一.函数指针——基本形式 char Fun(int n) { return char(n); } //char(*pFun)(int); void main() { char(*pFun)(int); pFun = Fun; ); cout << c; } 二.函数指针——typedef形式 char Fun(int n) { return char(n); } //typedef char(*PFun)(int); //PFun pFun; void main() { typedef cha…
在cocos2d-x中,经常会出现这样的调用,如 ->*,这个是什么意思呢,如下面得这个例子: , 其实这是对类的成员函数指针的调用,在cocos2dx中,这种形式多用于回调函数的调用.如我们经常用到的循环函数 schedule( CC_SCHEDULE_SELECTOR(PauseTest::unpause), 3); 这个意思就是每隔3秒,执行一下unpause方法,这里就用到了成员函数指针,先看下CC_SCHEDULE_SELECTOR的宏定义 #define CC_SCHEDULE_SE…
前言 这是改造前一篇 设计模式 的基础,使通知者不必知道观察者的类名和函数名,只需要知道更新函数的原型即可. 开发环境:WIN7 32位 + VS2010 发现在VS2005中使用std::funtion报错: 错误 1 error C2039: “function”: 不是“std”的成员 e:\vsprojectsforvms\designpattern\observer2\observer2.cpp 123 于是改为VS2010来写. #include "stdafx.h" //…
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/6729273.html C++中的类成员指针 在上一篇文章中我提到了C++中的函数指针.那么如果想定义一个指向类数据成员或者函数成员的指针,又该怎么办呢? 本质上讲和之前我提到的写法没有什么不同,只不过是要加上域定义而已. 1.类…
昨天发现了一个问题,就是使用对类中的非静态成员函数使用std::bind时,不能像普通函数一样直接传递函数名,而是必须显式地调用&(取地址),于是引申出我们今天的问题:非静态类成员函数指针和普通函数指针有什么区别? 一.C++中对函数到指针的隐式转换 以前在C语言程序设计课上,老师都会说:“函数名就是指向这个函数的指针”.实际上通过查阅cppreference中的隐式转换规则,其中有这么一句关键的话道出了玄机: 函数类型 T 的左值能隐式转换成指向该函数的指针纯右值.这不作用于非静态成员函数,因…
前面的从汇编看c++中成员函数指针(一)和从汇编看c++成员函数指针(二)讨论的要么是单一类,要么是普通的多重继承,没有讨论虚拟继承,下面就来看一看,当引入虚拟继承之后,成员函数指针会有什么变化. 下面来看c++源码: #include <cstdio> using namespace std; class Top { public: virtual int get1() { ; } virtual int get2() { ; } }; class Left : virtual public…
下面先看一段c++源码: #include <cstdio> using namespace std; class X { public: virtual int get1() { ; } virtual int get2() { ; } }; class Y { public: virtual int get3() { ; } virtual int get4() { ; } }; class Z : public X, public Y { public: int get2() { ; }…