方法一:利用构造函数和静态数据成员
[cpp]view plaincopy#include<iostream> usingnamespacestd; classTemp { public: Temp() { ++N; Sum+=N; } staticvoidReset() { N=0; Sum=0; } staticintGetSum() { returnSum; } private: staticintN; staticintSum; }; intTemp::N=0; intTemp::Sum=0; intsolution_Sum(intn) { Temp::Reset(); Temp*a=newTemp[n]; delete[]a; a=0; returnTemp::GetSum(); } intmain() { cout<<solution_Sum(100)<<endl; return0; }
方法二:利用虚函数
[cpp]view plaincopy#include<iostream> usingnamespacestd; classA; A*Array[2]; classA { public: virtualintSum(intn) { return0; } }; classB:publicA { public: virtualintSum(intn) { returnArray[!!n]->Sum(n-1)+n; } }; intsolution2_Sum(intn) { Aa; Bb; Array[0]=&a; Array[1]=&b; intvalue=Array[1]->Sum(n); returnvalue; } intmain() { cout<<solution2_Sum(100)<<endl; return0; }
利用函数指针
[cpp]view plaincopy#include<iostream> usingnamespacestd; typedefint(*fun)(int); intsolution_f1(inti) { return0; } intsolution_f2(inti) { funf[2]={solution_f1,solution_f2}; returni+f[!!i](i-1); } voidmain() { cout<<solution_f2(100)<<endl; }
三。利用&&的短路特性
[cpp]view plaincopy#include<stdio.h> #include<stdlib.h> #include<string.h> intadd_fun(intn,int&sum) { n&&add_fun(n-1,sum); return(sum+=n); } intmain() { intsum=0; intn=100; printf("1+2+3+...+n=%d\n",add_fun(n,sum)); return0; }