成员函数指针C++类成员函数如何赋值给函数指针

成员函数指针  时间:2021-06-02  阅读:()

常成员函数怎么用指针调用啊

C++中,不是常对象也可以调用常成员函数。

(1) 常对象 用const修饰的对象叫对象常量,其格式如下: 〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉 声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。

例:分析下列错误的地方,说明理由: #include class Point { int x, y; public: Point(int a, int b) { x=a; y=b;} Void MovePoint( int a, int b){ x+=a; y+=b;} Void print(){ cout<<"x="<
所谓常引用是指说明引用时用const修饰。

常引用所引用的对象不能被更 新,一般用做形参。

其格式: const 〈类型说明〉&〈引用名〉 例:根据例题5-11的类给出程序的执行结果: #include int length(const Point &p1, const Point &p2) { int l; l=sqrt((p1.x -p2.x)* (p1.x -p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); return l; } void main( ) { Point a(1,1),b(4,5); Cout<<"两点的距离是:"<
其格式如下: 〈类型〉〈函数名〉(〈参数表〉)const; 常成员函数的作用和功能: 常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。

常对象只能调用类的常成员函数 以及类的静态成员函数。

例:给出下列程序的执行结果: #include class Point { int x, y; public: Point(int a, int b) { x=a; y=b;} Void MovePoint( int a, int b){ x+=a; y+=b;} Void print()const { cout<<"x="<

C++中怎么获取类的成员函数的函数指针

虾米意思?是指类的成员变量是否可以指向类中的成员函数吗?如果这样子的,类的成员函数指针就是用来起这个作用,mfc消息路由机制也是机遇此原理。

#include <stdio.h>class A{public: A() // Ctor { m_pfn1 = A::foo; // 有没有取地址符号一样 m_pfn2 = &A::bar; (this->*m_pfn1)(); (this->*m_pfn2)(0); } void foo(){printf("foo ");} // 类函数 virtual void bar(int){printf("bar ");} void (A::*m_pfn1)(); // 类函数指针成员变量 void (A::*m_pfn2)(int); // 类函数指针成员变量};int _tmain(int argc, _TCHAR* argv[]){ // 1. 类函数指针成员变量的使用 A a; A* p = &a; (a.*(a.m_pfn1))(); (a.*(a.m_pfn2))(0); // 多态 (p->*(p->m_pfn1))(); (p->*(p->m_pfn2))(0); // 多态 // 2. 类外函数指针变量的使用 typedef void (A::*MemFunPtr)(); MemFunPtr memPtr = &A::foo; (a.*memPtr)(); (p->*memPtr)(); return 0;} 补充: ->* 和.* 是C++新增加的操作符号,专用类成员指针变量取址(成员函数指针,成员变量指针)

如何使用指向类的成员函数的指针

指向函数的指针的用法: 1.指向函数的指针的类型 指向函数的指针应该怎样声明?拿两个字符串的比较函数来说: int strCompare(const string & s1, const string & s2) ; 如果两个字符串相等就返回0,否则,s1< s2返回负数,s1 > s2返回正数其实函数名不是其类型的一部分,函数类型是只由它的返回类型和参数来决定。

函数名称只不过是指向函数代码的地址。

所以指向函数的指针的类型应该用下面的形式声名: int (*pf)( const string &, const string & ); 2.初始化和赋值 指向函数的指针可如下被初始化只有当赋值操作符左边指针的参数表和返回类型与右边函数或指针的参数表和返回类型 完全匹配时初始化和赋值才是正确的如果不匹配则将产生编译错误消息在指向函数 类型的指针之间不存在隐式类型转换。

int (*pfi)( const string &, const string & ) = strCompare; int (*pfi2)( const string &, const string & ) = &strCompare; 指向函数的指针可以如下被赋值 pfi = strCompare; pfi2 = pfi; 3.调用 如下代码: #include <iostream> using namespace std; int min( int*, int ); int (*pf)( int*, int ) = min; const int iaSize = 5; int ia[ iaSize ] = { 7, 4, 9, 2, 5 }; int main() { cout << "Direct call: min: " << min( ia, iaSize ) << endl; cout << "Indirect call: min: " << pf( ia, iaSize ) << endl; return 0; } int min( int* ia, int sz ) { int minVal = ia[ 0 ]; for ( int ix = 1; ix < sz; ++ix ) if ( minVal > ia[ ix ] ) minVal = ia[ ix ]; return minVal; } 4.函数指针的数组 我们可以声明一个函数指针的数组例如 int (*testCases[10])(); 将testCases 声明为一个拥有10 个元素的数组每个元素都是一个指向函数的函数指针,该函数没有参数返回类型为int。

上面的声明等价于下面声明: typedef int (*PFV)(); // 定义函数类型指针的typedef PFV testCases[10]; 函数指针的数组可以用一个初始化列表来初始化该表中每个初始值都代表了一个与数 组元素类型相同的函数例如 int lexicoCompare( const string &, const string & ); int sizeCompare( const string &, const string & ); typedef int ( *PFI2S )( const string &, const string & ); pareFuncs[2] = { lexicoCompare, sizeCompare }; // 两个等价的调用 pfCompare[ 0 ]( string1, string2 ); // 编写 ((*pfCompare)[ 0 ])( string1, string2 ); // 显式 5,参数和返回类型 函数参数的类型不能是函数类型函数类型的参数将被自动转换成该函数类型的指针 例如 // typedef 表示一个函数类型 typedef int functype( const string &, const string & ); void sort( string *, string *, functype ); 编译器把sort()当作已经声明为 void sort( string *, string *, int (*)( const string &, const string & ) ); 上面这两个sort()的声明是等价的 注意除了用作参数类型之外函数指针也可以被用作函数返回值的类型例如 int (*ff( int ))( int*, int ); 该声明将ff()声明为一个函数它有一个int 型的参数返回一个指向函数的指针类型 为 int (*) ( int*, int ); 同样使用typedef 名字可以使声明更容易读懂例如下面的typedef PF 使得我们能更 容易地分解出ff()的返回类型是函数指针 typedef int (*PF)( int*, int ); PF ff( int ); 函数不能声明返回一个函数类型如果是则产生编译错误例如函数ff()不能如下 声明 // typedef 表示一个函数类型 typedef int func( int*, int ); func ff( int ); // 错误: ff()的返同类型为函数类型

C++怎样实现一个类的函数指针成员指向这个类的成员函数?

声明类名 定义类型 声明类体 类似于 class MyClass; typedef void (MyClass::*PFunc) (int); class MyClass { public: void Func1(int); void Func2(int); PFunc func; }; 你可以试试

C++类成员函数如何赋值给函数指针

1.一个指向外部函数的指针声明为: void(*pf)(char*,constchar*); void strcpy(char* dest,constchar* source); pf=strcpy; 2.一个指向类a成员函数的指针声明为: void(a::*pmf)(char*,constchar*);

RackNerd :美国大硬盘服务器促销/洛杉矶multacom数据中心/双路e5-2640v2/64G内存/256G SSD+160T SAS/$389/月

大硬盘服务器、存储服务器、Chia矿机。RackNerd,2019年末成立的商家,主要提供各类KVM VPS主机、独立服务器和站群服务器等。当前RackNerd正在促销旗下几款美国大硬盘服务器,位于洛杉矶multacom数据中心,亚洲优化线路,非常适合存储、数据备份等应用场景,双路e5-2640v2,64G内存,56G SSD系统盘,160T SAS数据盘,流量是每月200T,1Gbps带宽,配5...

A400互联1H/1G/10M/300G流量37.8元/季

A400互联是一家成立于2020年的商家,本次给大家带来的是,全新上线的香港节点,cmi+cn2线路,全场香港产品7折优惠,优惠码0711,A400互联,只为给你提供更快,更稳,更实惠的套餐。目前,商家推出香港cn2节点+cmi线路云主机,1H/1G/10M/300G流量,37.8元/季,云上日子,你我共享。A400互联优惠码:七折优惠码:0711A400互联优惠方案:适合建站,个人开发爱好者配置...

虎跃云-物理机16H/32G/50M山东枣庄高防BGP服务器低至550元每月!

虎跃科技怎么样?虎跃科技(虎跃云)是一家成立于2017年的国内专业服务商,专业主营云服务器和独立服务器(物理机)高防机房有着高端华为T级清洗能力,目前产品地区有:山东,江苏,浙江等多地区云服务器和独立服务器,今天虎跃云给大家带来了优惠活动,为了更好的促销,枣庄高防BGP服务器最高配置16核32G仅需550元/月,有需要的小伙伴可以来看看哦!产品可以支持24H无条件退款(活动产品退款请以活动规则为准...

成员函数指针为你推荐
企业资源管理系统企业管理系统都有什么功能搜索引擎的概念7 什么是搜索引擎?如何在Internet上搜索图片和文字资料的?asp大马问:ASP是什么?ASP根据什么制作木马的?ASP木马和大马有什么区别?云计划云计划创富平台怎么样?有谁知道。介绍一下。河北云办税厅用小度怎么打开河北教育资讯云平台?河北云办税厅河北省商务厅的人员编制移动硬盘文件或目录损坏且无法读取移动硬盘提示文件或目录损坏且无法读取,怎么修复网络备份网络系统备份的主要目的以及网络系统备份体系主要包括哪几方面?网络备份怎样手动备份宽带帐号密码点心os什么是点心os?手机操作系统和手机区别么?一个是硬件一个是软件?听说炒的好火?
in域名注册 technetcal pw域名 哈喽图床 英文简历模板word seovip web服务器架设软件 国内php空间 免费ftp空间申请 福建天翼加速 北京双线机房 网站木马检测工具 drupal安装 华为云盘 空间首页登陆 登陆空间 免费asp空间申请 防cc攻击 工信部icp备案查询 购买空间 更多