Figure 1: Class CReport

class CReport
{
    int iLinesPerPage;
    int iLinesLeft;
    int iTitleLines;
    int iFooterLines;
    int iPageCount;
    // Function pointers for the title and footer functions
    void (*vTitlePrint)(ostream &, void *, int);
    void (*vFooterPrint)(ostream &, void *, int);
    // Data for the title and footer functions
    void *vTitleData;
    void *vFooterData;
    ostream *RepStream;
public:

    CReport(void _vTitlePrint(ostream &, void *, int), 
        int _iTitleLines, 
        void _vFooterPrint(ostream &, void *, int),
        int _iFooterLines, ostream *_RepStream,
        int _iLinesPerPage);
    void 
    vPrintLine(void _vLinePrint(ostream &,void *), int _iLines,
        void *_vTitleData, void *_vData, void *_vFooterData);
    void vNewPage();
    void vPrintBlankLines(int _iLines);
    // vPrintFooter is overloaded to provide for the case where 
    // there is no data for the report.  It will print the title,
    // a NO DATA Message, and a blank footer
    void vPrintFooter();
    void vPrintFooter(void *_vTitleData, void *_vFooterData);
    ...
};