Listing 3 TableDataAverage class

// tdavg.hpp
#ifndef TDAVG_HPP
#define TDAVG_HPP
#include "tbldata.hpp"

// (Same assumptions about cellType as TDNORM)
template <class cellType> class TableDataAverage:
       public TableData<cellType>
{
public:
   TableDataAverage (TableData<cellType> *const
          prev): TableData<cellType> (prev)
   { }

   virtual const cellType GetCell (const int row,
          const int col)
   {
      assert (PrevTD != 0);
      assert (row == 0); // only 1 row in this table
      // Inherit properties from row 0 cell:
      cellType cell (PrevTD->GetCell (0, col));
      for (int p_row = 1; p_row < PrevTD->GetNumRows(); p_row++)
          cell.SetValue (cell.GetValue() +
                (PrevTD->Getcell
                (p_row, col )).GetValue());
      cell.SetValue (cell.GetValue() /
             PrevTD->GetNumRows());
      return (cell);
   }

   virtual void PutCell (const int, const int,
          const cellType &)
   { cerr << "Error: Row write-protected!" << endl; }

   virtual const int GetNumRows (void) const
   { return (1); }

   virtual const char &GetRowHeading (const int)
   { return (*("Average")); }

};
#endif
// End of File