函数指针与多态

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

int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int cheng(int a, int b)
{
    return a*b;
}


int cal(int a, int b, int(*pFunc)(int,int))
{
    return pFunc(a, b);
}

// 

class AbstractCal
{
public:
    void setX(int x)
    {
        this->x = x;
    }
    void setY(int y)
    {
        this->y = y;
    }
    virtual int GetResult() = 0;
protected:
    int x;
    int y;
};

class AddCal :public AbstractCal
{
public:
    AddCal(int a, int b)
    {
        x = a;
        y = b;
    }
    int GetResult() { return x + y; }
};



class SubCal :public AbstractCal
{
public:
    SubCal(int a, int b)
    {
        x = a;
        y = b;
    }
    int GetResult() { return x - y; }
};


class CheCal :public AbstractCal
{
public:
    CheCal(int a, int b)
    {
        x = a;
        y = b;
    }
    int GetResult() { return x * y; }
};


int Cal(AbstractCal* obj)
{
    return obj->GetResult();
}

int main()
{
    cout << cal(10, 20, add) << endl;
    cout << cal(10, 20, sub) << endl;
    cout << cal(10, 20, cheng) << endl;
    cout << "-------------------------------" << endl;

    AddCal a(10,20);
    cout << Cal(&a) << endl;

    SubCal b(10, 20);
    cout << Cal(&b) << endl;
    CheCal c(10, 20);
    cout << Cal(&c) << endl;

    return 0;
}

 

posted @ 2019-02-26 15:42  吹过田野的风  阅读(443)  评论(0编辑  收藏  举报