classTemp
{public:
Temp()
{
++n;
sum += n;
}
staticvoid reset()
{
n = 0;
sum = 0;
}
staticint getsum()
{
returnsum;
}
private:
staticint n;
staticintsum;
};
int Temp::n = 0;
int Temp::sum = 0;
int Sum(int n)
{
Temp::reset();
Temp *tmp = new Temp[n];
delete[] tmp;
return Temp::getsum();
}
int main()
{
cout << Sum(100) << endl;
system("pause");
return0;
}
利用虚函数
class A;
A *array[2];
class A
{
public:
virtualint Sum(int n)
{
return0;
}
};
class B : public A
{
int Sum(int n)
{
returnarray[!!n]->Sum(n - 1) + n;
}
};
int Sum(int n)
{
A a;
B b;
array[0] = &a;
array[1] = &b;
returnarray[1]->Sum(n);
}
int main()
{
cout << Sum(100) << endl;
system("pause");
return0;
}
利用函数指针
typedef int(*fun)(int n);
int GetSum1(int n)
{
return0;
}
int GetSum2(int n)
{
fun arr[2] = { GetSum1, GetSum2 };
return arr[!!n](n - 1) + n;
}
int Sum(int n)
{
return GetSum2(n);
}
int main()
{
cout << Sum(100) << endl;
system("pause");
return0;
}
利用&&特性
int add_fun(int n, int &sum)
{
n && add_fun(n - 1, sum);
return (sum += n);
}
int main()
{
intsum = 0;
int n = 100;
printf("1+2+3+...+n=%d\n", add_fun(n, sum));
return0;
}