CMPT 212 expr.h
David Simpson (simpson@cs.sfu.ca)
Mon, 23 Mar 1998 14:21:45 -0800 (PST)
//
// NAME
// expr.h
//
// DESCRIPTION
// This file contains the type definitions and function prototypes
// exported by the Expression module.
//
#ifndef _expr_h_
#define _expr_h_
//
// Include files.
//
#include <iostream.h>
//
// NAME
// expr
//
// DESCRIPTION
// This abstract class models an expression.
//
// FUNCTION MEMBERS
// evaluate()
// - evaluates the expression.
// clone()
// - makes a copy of the expression and returns a pointer
// to it.
// display(ostream &)
// - outputs the expression to the given output stream.
//
class expr {
public:
virtual ~expr() { }
virtual double evaluate() const = 0;
virtual expr * clone() const = 0;
virtual ostream & display(ostream &) const = 0;
};
//
// NAME
// constant
//
// DESCRIPTION
// This class models a constant expression.
//
// DATA MEMBERS
// number - value of the expression.
//
// FUNCTION MEMBERS
// constant(const double)
// - constructs a constant expression from the given double.
// constant(const constant &)
// - copy constructor.
// ~constant()
// - destructor.
// evaluate()
// - evaluates the expression.
// clone()
// - makes a copy of the expression and returns a pointer
// to it.
// display(ostream &)
// - outputs the expression to the given output stream.
//
class constant : public expr {
public:
constant(const double);
constant(const constant &);
virtual ~constant();
double evaluate() const;
expr * clone() const;
ostream & display(ostream &) const;
private:
double number;
};
//
// NAME
// composite
//
// DESCRIPTION
// This class models a composite expression. A composite
// expression is an expression which consists of an operation
// and two subexpressions.
//
// MEMBER TYPES
// operation - kinds of operations in an expression.
//
// DATA MEMBERS
// oper - operation of the expression.
// op1 - pointer to the first operand.
// op2 - pointer to the second operand.
//
// FUNCTION MEMBERS
// composite(const composite &)
// - copy constructor.
// composite(const operation, expr *, expr *)
// - constructs an expression from the given operation and
// two subexpressions.
// ~composite()
// - destructor.
// evaluate()
// - evaluates the expression.
// clone()
// - makes a copy of the expression and returns a pointer
// to it.
// display(ostream &)
// - outputs the expression to the given output stream.
//
class composite : public expr {
public:
enum operation { Addition,
Subtraction,
Multiplication,
Division
};
composite(const composite &);
composite(const operation, expr *, expr *);
virtual ~composite();
double evaluate() const;
expr * clone() const;
ostream & display(ostream &) const;
private:
operation oper;
expr * op1;
expr * op2;
};
#endif