/************Test.h*********************/ #ifndef TEST_H #define TEST_H #include <iostream> #include <ctime> using namespace std; //typedef (int Function_array::*funp[4])(int,int); class Function_array { public: Function_array(); Function_array(time_t pt); Function_array(double numa,char type,double numb); ~Function_array(); double add(double x,double y); double sub(double x,double y); double mult(double x,double y); double dev(double x,double y) ; void DispResult(double a,double b,int chioce) ; friend ostream &operator<<(ostream &out, Function_array &Newfarry);//重载操作符<<,输出时间 int Year; int Month, Day; int Hour; int Minutes; int Seconds; time_t t; tm *local; private: int ca; int cb; char ctype; typedef double (Function_array::*funp)(double , double ); static funp farray[4]; }; #endif /*********************test.cpp*************************/ #include "Test.h" /*------------------------------------------------------------------------*/ Function_array::Function_array() { ca = 1; cb = 1; ctype = '+'; } Function_array::Function_array(double numa, char type, double numb) { ca = numa; cb = numb; ctype = type; } Function_array::~Function_array() { } Function_array::Function_array(time_t pt) { pt = time(NULL); t = pt; local = localtime(&t); Year = 1900 + local->tm_year; Month = local->tm_mon+1; Day = local->tm_mday; Hour = local->tm_hour; Minutes = local->tm_min; Seconds = local->tm_sec; } ostream &operator<<(ostream &out, Function_array &Newfarry) //重载操作符<<,输出时间 { out<<Newfarry.Year<<"年"<<Newfarry.Month<<"月"<<Newfarry.Day<<"日"; out<<Newfarry.Hour<<":"; if(Newfarry.Minutes<0) out<<"0"; out<<Newfarry.Minutes<<":"; if(Newfarry.Seconds<0) out<<"0"; out<<Newfarry.Seconds; out<<endl; return out; } /*------------------------------------------------------------------------*/ double Function_array::add (double x,double y) //定义函数add { cout<<x<<" + "<<y<<" = "<<(x+y); return x+y; } double Function_array::sub (double x,double y) //定义函数sub { cout<<x<<" - "<<y<<" = "<<(x-y); return x-y; } double Function_array::mult (double x,double y) //定义函数mult { cout<<x<<" * "<<y<<" = "<<(x*y); return x*y; } double Function_array::dev (double x,double y) //定义函数dev { cout<<x<<" / "<<y<<" = "<<(x/y); return x/y; } /*------------------------------------------------------------------------*/ /* void Function_array::DispResult(int a, int b, int (*fun)(int,int)) { cout<<fun(a,b)<<endl; } */ void Function_array::DispResult(double a, double b, int chioce) // 调用别的函数的函数 { if(0<=chioce && chioce <= 3) (this->*farray[chioce])(a,b); //由对象调用数组中的函数/ } /***********************main.cpp**********************/ #include <iostream > #include "Test.h" using namespace std; Function_array :: funp Function_array::farray[4]= { &Function_array::add, &Function_array::sub, &Function_array::mult, &Function_array::dev}; void main() { /*---------------------------------------个人签名--------------------------------------------*/ cout<<"/t/tWelcome into the computer, the selection of your favourite!"<<endl; cout<<"/t/t作者:SMY"<<endl; time_t pt=time(NULL); Function_array *funclock=new Function_array(pt); cout<<"/t/t时间:"; cout<<*funclock; cout<<endl<<endl; /*---------------------------------------主函数--------------------------------------------*/ //定义了一个函数指针数组,并初始化 Function_array farray = Function_array(); char op = '+'; double a = 0; double b = 0; cout<<"*******************欢迎使用C++简易计算器******************"<<endl; cout<<"Please intput the expression a + b:/n"; cin>>a>>op>>b; switch(op) { case '+': //调用函数add //DispResult(a,b,funp[0]); farray.DispResult(a, b, 0); break; case '-': //调用函数sub //DispResult(a,b,funp[1]); farray.DispResult(a, b, 1); break; case '*': //调用函数mult //DispResult(a,b,funp[2]); farray.DispResult(a, b, 2); break; case '/': //调用函数dev farray.DispResult(a, b, 3); break; default: cout<<"Operator is illegal;/n"; } fflush(stdin); cout<<endl<<"Program is finished, please press any key end"; getchar(); }