class Expression{
public:
//Expression stringtoExpression(string &s);
virtual float value(){return 0;}
};
class leaf:public Expression
{
virtual float value()=0 ;
};
class Breanch:public Expression
{
mainopr *node;
mathfunc node2;
Expression right,left;
public:
Breanch(char a,Expression &l,Expression &r);
Breanch(char *a,Expression &l);
virtual float value(){
return node->calculate(right.value(),left.value());}
};
Breanch::Breanch(char a,Expression &l,Expression &r)
{
if(a=='+')
node=new plus;
right=r;
left=l;
}
/*Breanch::Breanch(char *a,Expression &l)
{
node2=a;
left=l;
}*/
class number:public leaf{
const float num;
public:
number(float n=0):num(n){}
virtual float value(){return num;}
};
/*Expression Expression::stringtoExpression(string &s)
{
int len=s.length();
if((s[0]=='(')&&(s[len-1]==')')
*/
int main()
{
/* mainopr *m=new plus;
operators *p=m;
cout<<p->calculate(2,3);
system("pause");*/
Expression *n1=new number(3);
Expression *n2=new number(4);
Expression *b1=new Breanch('+',*n1,*n2);
cout<<b1->value();
system("pause");
return 0;
}