#ifndef Number_SEEN__ #define Number_SEEN__ /////// Number.h /////// #define OP operator #define VT virtual #define CS const class Number { public: Number() {} Number(int a); Number(int a, int b); Number(CS Number&); // copy constructor Number& OP =(CS Number&); // assignment VT void display() { ptr->display(); } VT Number OP +(CS Number& n) CS { return ptr->OP +(n); } VT Number OP *(CS Number& n) CS { return ptr->OP *(n); } VT Number OP /(CS Number& n) CS { return ptr->OP /(n); } ~Number(){ delete ptr; } protected: VT Number AddFra(CS Number& n) CS // n is Fra { return n.ptr->AddFra(*this); } VT Number TimFra(CS Number& n) CS // n is Fra { return n.ptr->TimFra(*this); } VT Number DivFra(CS Number& n) CS // n is Fra { return n.ptr->DivFra(*this); } // n / *this VT Number AddInt(CS Number& n) CS // n is Int { return n.ptr->AddInt(*this); } VT Number TimInt(CS Number& n) CS // n is Int { return n.ptr->TimInt(*this); } VT Number DivInt(CS Number& n) CS // n is Int { return n.ptr->DivInt(*this); } // n / *this private: VT Number* copy() const { return ptr->copy() ;} Number* ptr; }; #include "Fraction.h" #include "Integer.h" inline Number::Number(int a) // make integer : ptr(new Integer(a)) { } inline Number::Number(CS Number& n) : ptr((&n)->copy()) { } #endif