| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 749 人关注过本帖
标题:如何使用函数指针调用类中的函数和普通函数?
只看楼主 加入收藏
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:8 
如何使用函数指针调用类中的函数和普通函数?
声明一个参数为int型、返回值为long型的函数指针;声明类A的一个成员函数指针,其参数为int型,返回值为long型。
    麻烦看一看错在哪里:
#include<iostream>
using namespace std;

class A
{
public:
    long Sum(int k);
private:
    int n;
};

A::Sum(int k)   //求自然数的前n项和
    {
        int n;
        cout<<"请输入所求前n项和的n:"<<endl;
        cin>>n;
        k=n;
        long sum=0;
        for(int i=0;i<n;i++)
            sum+=i+1;
        cout<<"前"<<n<<"项和="<<sum<<endl;
        return sum;
    }

long func(int m)  //求自然数n的阶乘
{
    int S=1;
    cout<<"请输入所求阶乘的数m:"<<endl;
    cin>>m;
    for(int j=2;j<m+1;j++)
        S*=j;
    cout<<m<<"!="<<S<<endl;
    return 0;
}

int main(){
    A p_fn2;
    long (* p_fn1)(int);
    long ( A::*p_fn2)(int);
    p_fn1=func;
    p_fn2=Sum;
    return 0;
}
搜索更多相关主题的帖子: public include private 自然数 如何 
2015-06-27 16:48
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:10 
前两个函数竟然都写错了,你的sum函数中参数k是干嘛的,func函数的参数m是干嘛的?函数里面你再输入一个值有意思吗

一片落叶掉进了回忆的流年。
2015-06-27 18:34
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:0 
当然有意思啦,要不然能计算是固定的,不能通用,程序就没啥用途了,不要只说啊,把改后的代码贴上来才是王道。
2015-06-27 19:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
程序代码:
#include<iostream>

using namespace std;

long Sum(int k)   //求自然数的前n项和
{
    long sum=0;
    for(int i=1;i<=k;i++) sum+=i;
    return sum;
}


int main()
{
    long (* p_fn1)(int);
    p_fn1=Sum;
    long s=p_fn1(25);
    printf("s=%d\n",s);
    return 0;
}

DO IT YOURSELF !
2015-06-28 09:41
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:10 
回复 3楼 w2009w
二楼说得不错
long Sum(int k);
看看这个成员函数,既然你在函数体内接受用户输入数字,这里就不需要参数k了嘛。传入参数的意义是什么,就是把用户输入数据传入函数体内进行处理。也就是说成员函数内不使用cin语句,直接把主函数中赋好值的整数作为传参k,传进去后直接用于for循环,long Sum(int k)才能体现出意义
2015-06-28 13:07
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:0 
回复 5楼 yangfrancis
明白了,受教了,不错!
2015-06-28 13:19
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:10 
回复 3楼 w2009w
#include<iostream>
using namespace std;

class A
{
public:
    long Sum(int k=n);
    void SetValue(int x){n=x;}//这两句与你的功能无关,
    int GetValue(){return n;} //只是为了让你的n有点作用

private:
    int n=1;
};

A::Sum(int k)   //求自然数的前n项和
    {
        for(int i=1;i<=k;i++)
            sum+=i;
        cout<<"前"<<k<<"项和="<<sum<<endl;
        return sum;
    }

long func(int m)  //求自然数n的阶乘
{
    int S=1;
    for(int j=2;j<m+1;j++)
        S*=j;
    cout<<m<<"!="<<S<<endl;
    return 0;
}

int main(){
    A p_fn2;
    cout<<"输入要求前n个自然数的个数:";
    int a,answer1;cin>>a;
    answer1=p_fn2.Sum(a);//得数已在屏幕上输出过,如果其他地方不需要它可不保
                        //留函数返回值
    cout<<"输入要求前n个自然数阶乘的个数:";
    long answer2;
    answer2=func(p_fn2.GetValue());
    return 0;
}
2015-06-28 13:25
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:0 
回复 7楼 yangfrancis
好多错误啊!兄弟!
2015-06-28 14:08
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:0 
给大家参考一下!哈哈!!!
#include<iostream>
using namespace std;

class A   //定义类A
{
public:
    long Sum(int n)//求自然数的前n项和
        {
        long sum=0;
        for(int i=0;i<n;i++)
            sum+=i+1;
        cout<<"1+2+...+"<<n<<"="<<sum<<endl;
        return sum;
    }
private:
    int n;
};     

long func(int m)  //求自然数m的阶乘
{
    long S=1;
    for(int j=2;j<m+1;j++)
        S*=j;
    cout<<m<<"!="<<S<<endl;
    return S;
}

int main(){
    A a;     //定义类A的对象a
    long (* p_fn1)(int);   //定义指向普通函数的指针
    long (A::*p_fn2)(int)=&A::Sum;  //定义指向类成员函数的指针
    p_fn1=func;
    long S=p_fn1(5);
    a.Sum(5);
    (a.*p_fn2)(5);
    return 0;
}
2015-06-28 14:19
快速回复:如何使用函数指针调用类中的函数和普通函数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044305 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved