/* An example of polymorphism. Uses nodes of different classes to create a binary expression tree to evaluate an arithmetic expression. Class hierarchy: Class Node has derived classes BinaryOperator & Data Class BinaryOperator has derived classes Plus & Times All classes have virtual function evaluate() */ #include using namespace std; //Base class class Node { public: /* Constructor with output statement to show when this constructor is called */ Node(){ cout<<"Node constructor"<evaluate() + right->evaluate(); } }; //derived class - to multiply two integers class Times: public BinaryOperator { public: //constructor Times(Node *left2, Node *right2): BinaryOperator(left2,right2){ cout<<"Times constructor"<evaluate() * right->evaluate();} }; //derived class - a node to store data class Data: public Node { public: //constructor Data(int value2){ cout<<"Data constructor for value = "<evaluate(); cout<