打印

形参问题

[复制链接]
965|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2012-11-23 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostream>
  
using namespace std;
  
class test
{
public:
     test(int a=0):val(a) {}
     typedef void (*F)(const int&);
  
     ~test(){dosomething(myprint);}//为什么非静态成员函数的指针不能作为参数
     void dosomething(F tmp)
     {//若此处给出默认参数如:void dosomething(F tmp=myprint),则myprint应是静态成员函数
         tmp(val);
     }
private:
     int val;
     void myprint(const int& a){std::cout<<a<<std::endl;}//static
      
};
  
  
int main()
{
     test c(8);
     return 0;
}

相关帖子

沙发
火箭球迷| | 2012-11-23 23:29 | 只看该作者
因为形参只是副本,传的实参具有实际意义的内存,不管是堆、栈或静态区
给一个函数指针作为参数分配内存现在的处理方法只有静态区分配,所以需要声明为静态的

使用特权

评论回复
板凳
dfsa| | 2012-11-23 23:38 | 只看该作者
typedef void (test::*F)(const int&);
//加函数指针的目的就是为了能用类外面的函数,这样就限定死了
(this->*tmp)( val);//也限定了

使用特权

评论回复
地板
hsbjb| | 2012-11-25 14:40 | 只看该作者
这个主意涉及的应该是静态成员相关问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

2496

帖子

1

粉丝