形参问题

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部