Here's what I would do...
Code:
#include <iostream>
using namespace std;
class List
{
int *data;
int current;
int max;
int smd(int*p){return p<data?0:smd(p-1)+(*p&1?*p:0);}
int grtr(int*p,int v,int c){return p<data?0:c+grtr(p-1,v,*p>v?c++:c);}
wostream&prsq(int*p){return p<data?wcout:(prsq(p-1)<<*p**p).put(L',');}
public:
List(int x) : current(0),max(x),data(new int[x]) {}
~List() {delete[]data;}
int SumOdd() {return smd(data+current-1);}
int Greater(int val) {return grtr(data+current-1,val,0);}
void PrintSquares() {prsq(data+current-1)<<L"\b "<<endl;}
// added this for testing (doesn't "grow" data)
void CopyList(int *p, int n) {memcpy(data,p,(current=n)<<2);}
};//List
int main()
{
int test[] = {1, 2, 3, 4 ,5, 6, 7, 8, 9 ,10};
int len = sizeof(test)/sizeof(*test);
List l(len);
l.CopyList(test,len);
cout << "l.SumOdd() = " << l.SumOdd() << endl
<< "l.Greater(3) = " << l.Greater(3) << endl
<< "l.PrintSquares() : ";
l.PrintSquares();
return 0;
}//main
As you can see, I chose a recursive strategy. Although rather stupid for this use, it is fun to look at.
gg