首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++类中使用函数指针有关问题

2013-03-21 
C++类中使用函数指针问题#ifndef _CFUNC_H_#define _CFUNC_H_#pragma once#include iostreamusing names

C++类中使用函数指针问题
#ifndef _CFUNC_H_
#define _CFUNC_H_
#pragma once
#include <iostream>
using namespace std;
class Cfunc
{
public:
inline double func1(double x, double y)
{
return (x+y);
}
inline double func2(double x, double y)
{
return 2.0 * (x+y);
}
inline double func3(double x, double y)
{
return 3.0 * (x+y);
}
inline double func4(double x, double y)
{
return 4.0 * (x+y);
}
public:
inline void calculate(double x, double y)
{
double (Cfunc::*FUN[4])(double, double);
double s;

FUN[0] = &Cfunc::func1;
FUN[1] = &Cfunc::func2;
FUN[2] = &Cfunc::func3;
FUN[3] = &Cfunc::func4;

for(int i = 0; i != 4; i++)
{
s = (*FUN[i])(x,y);

cout<<"Num of Func: "<<i<<" result: "<<s<<endl;
}
}
};
#include "Cfunc.h"
#include <iostream>
using namespace std;

int main()
{
Cfunc test;

test.calculate(1.5,2.0);

return 0;
}
请问上述代码错在哪里,如何改正?
谢谢! c++ class
[解决办法]
头文件


//Cfunc.h
#ifndef _CFUNC_H_
#define _CFUNC_H_
#include <iostream>
using namespace std;
class Cfunc
{
typedef double (Cfunc::*FUN)(double, double);  //声明函数指针
public:
    double func1(double x, double y)  //不需要inline,在里面定义函数默认为内联函数
    {
           return (x+y);
    }
    double func2(double x, double y)
    {
           return 2.0 * (x+y);
    }
    double func3(double x, double y)
    {
           return 3.0 * (x+y);
    }
    double func4(double x, double y)
    {
           return 4.0 * (x+y);
    }
public:
FUN f[4];   //定义函数指针数组
    void calculate(double x, double y)
    {
        double s;
        
f[0] = &Cfunc::func1;//指向成员函数
        f[1] = &Cfunc::func2;
        f[2] = &Cfunc::func3;
        f[3] = &Cfunc::func4;
        
        for(int i = 0; i != 4; i++)
        {
            s = (this->*f[i])(x,y);


            cout<<"Num of Func: "<<i<<" result: "<<s<<endl;
        }
    }
};
#endif


Cpp文件

#include "Cfun.h"
#include <iostream>
using namespace std;

int main()
{
    Cfunc test;
    
    test.calculate(1.5,2.0);

    return 0;
}

热点排行