怎么获得成员函数的地址
为什么我用函数指针不能指向成员函数?无法通过编译!提示类型不符。比如下面这段就通不过编译。。提示类型不符。“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;
} 展开
比如下面这段就通不过编译。。提示类型不符。
“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;
} 展开
5个回答
2015-10-18 · 知道合伙人生活技巧行家
关注
展开全部
首先我们定义一个类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);
}
#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);
}
展开全部
用
int (why::*P)() = &(why::get);
吧
int (why::*P)() = &(why::get);
吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
童靴,你直接这样:
auto p = &(why::get); //这不跟简单吗?
auto p = &(why::get); //这不跟简单吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数指针的声明方法为:
数据类型标志符 (指针变量名) (形参列表);
注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是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
数据类型标志符 (指针变量名) (形参列表);
注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是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
贴下代码呗~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询