17:特殊类成员:函数指针5

1, 函数首地址被赋值给了函数名,故函数名是函数内存地址的首地址。
2, 一个指向函数的指针|必须确保该函数被定义 |
|且分配了内存 |否则他将指向一个空地址,这是指针的大忌。
3,long(*func)(int) : 声明了一个指针,该指针指向一个函数。
long*func1(int) :声明了一个函数,该函数返回一个指针。

4,定义:
float (*fp)(float&, float&);
fp=&rectangle;
fp=rectangle; 都行
#include <iostream>
#include <string>
using namespace std;

float (*fp)(float&, float&);
void (*p)(float&, float&);
//函数调用列表,将极大的减少代码量
float rectangle(float &x, float &y)
{
    return x * y;
}

float triangle(float &x, float &y)
{
    return x * y * 0.5;
}

void Swap(float &x, float &y)
{
    float n = x;
    x = y;
    y = n;
}

void print(float &x, float &y)
{
    cout << "长为:" << x << " 宽为:" << y << endl;
}

bool check(string str)
{
    for(int i=0; i<str.length();i++)
    {
        if((str[i] > '9' || str[i] < '0')&&(str[i]!='.'))
        {
            return false;
        }
    }
    return true;
}

void get(float &x, float &y)
{
    cout << "请输入x的新值: " << endl;
    std::string str1;
    cin >> str1;
    while(!check(str1))
    {
        cout << "输入的不是数字,请重新输入:x=" << endl;
        cin >> str1;
    }

    cout << "请输入y的新值: " << endl;
    std::string str2;
    cin >> str2;
    while(!check(str2))
    {
        cout << "输入的不是数字,请重新输入:y=" << endl;
        cin >> str2;
    }

    x = atof(str1.c_str());
    y = atof(str2.c_str());
}

int main()
{
    bool quit=false;
    float a = 2, b=3;
    int choice;
    
    while(quit==false)
    {
        cout << " 0: quit 1: input x,y 2 triangle 3 rectangle 4 swap x y" << endl;
        cin>>choice;
        switch(choice)
        {
            case 1:
                cout << "设定之前长和宽的值";
                /*print(a, b);
                get(a, b);
                cout << "设定之后长和宽的值";
                print(a, b);*/
                p=get;
                break;
            case 2:
                //print(a, b);
                cout << "三角形的面积为: ";/* << triangle(a,b) << endl;*/
                fp=triangle;
                break;
            case 3:
                //print(a, b);
                cout << "长方形的面积为: ";/* << rectangle(a,b) << endl;*/
                fp=rectangle;
                break;
            case 4:
                cout << "交换之前长和宽的值";
                /*print(a, b);
                swap(a, b);
                cout << "交换之后长和宽的值";
                print(a, b);*/
                p=Swap;
                break;
            default:
                quit=true;
                break;
        }

        if(choice==1 || choice==4)
        {
            print(a, b);
            p(a, b);
            print(a, b);
        }
        if(choice==2 || choice==3)
        {
            print(a, b);
            cout << "面积为:"  << fp(a, b) << endl;
        }

    }
}

 

posted on 2015-04-06 15:24  雨渐渐  阅读(135)  评论(0编辑  收藏  举报

导航