calc() can be streamlined quite a lot, for example, if oper is char (not char*) rather than string:
Code:
switch (oper)
{
case '+': return c+d;
case '-': return c-d;
default: return 0;
}
It's not necessary to assign the result of a calculation to a variable whose only purpose is to return that value; you can juse use return <expr>;

In terms of improving the program, there's not much that else can be done within the existing functionality. It's very simple, the only improvements really can be the addition of new features: other operators, functions, memory/memories etc. Have a look at Windows Calc for other inspiration.