怎么获得成员函数的地址

为什么我用函数指针不能指向成员函数?无法通过编译!提示类型不符。比如下面这段就通不过编译。。提示类型不符。“int(*P)()=XXXXX”这一句怎么写都不对,放类里类外... 为什么我用函数指针不能指向成员函数?无法通过编译!提示类型不符。
比如下面这段就通不过编译。。提示类型不符。

“int (*P)()= XXXXX”这一句怎么写都不对,放类里类外都不行

#include<iostream>
using namespace std;

class why
{
public:
int get(){return x;}

private:
int x;
};

int main()
{
why t;
int (*P)()=t.get;

return 0;
}
展开
 我来答
无语翘楚1
2015-10-18 · 知道合伙人生活技巧行家
无语翘楚1
知道合伙人生活技巧行家
采纳数:649 获赞数:14204
毕业于广州中山职业技术学院,平时喜欢去图书馆读些关于生活健康类的书籍,对于这类知识有着很深的了解。

向TA提问 私信TA
展开全部
首先我们定义一个类Ctest,类里面包含三个不同形式的成员函数,静态成员函数statFunc()、动态成员函数dynFunc()和虚拟函数virtFunc()。在main函数中我们利用cout标准输出流分别输出这三个函数的地址,程序如下所示:
#include <iostream>
#include <stdio.h>
using namespace std;
class Ctest
{
public:
static void statFunc()
{ cout << "statFunc" << endl; }
void dynFunc()
{ cout << "dynFunc" << endl; }
virtual void virtFunc()
{ cout << "virtFunc" << endl; }
};
void main()
{
cout << "address of Ctest::statFunc:" << &Ctest::statFunc << endl;
cout << "address of Ctest::dynFunc :" << &Ctest::dynFunc << endl;
cout << "address of Ctest::virtFunc:" << &Ctest::virtFunc << endl;
while(1);
}
冰火梦幻
2010-10-04 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:428万
展开全部

int (why::*P)() = &(why::get);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2012-11-26 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1239万
展开全部
童靴,你直接这样:

auto p = &(why::get); //这不跟简单吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6bc7109
2010-10-04 · TA获得超过764个赞
知道小有建树答主
回答量:555
采纳率:0%
帮助的人:0
展开全部
函数指针的声明方法为:
数据类型标志符 (指针变量名) (形参列表);
注1:“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
注2:函数括号中的形参可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
例一、
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
void main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d,%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把 max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
techird
2010-10-04 · TA获得超过153个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:104万
展开全部
贴下代码呗~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式