/////////////////////////////////////////////////////////////// // addOp.cpp - defines wrapper used to add an operation // // Exam1:Q10 // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 05 // /////////////////////////////////////////////////////////////// #include #include template class addOp : public T { public: addOp(const T& t) : T(t) {} operator T () { return static_cast(*this); } void op() const { std::cout << "\n I'm an added operation"; } }; template class revisedAddOp : public T { public: revisedAddOp(const T& t) : T(t) {} operator T () { return static_cast(*this); } template void op(const U& u) { std::cout << "\n I'm a revised added operation"; u.op(); } }; void main() { addOp ao = std::string("I'm a string"); std::cout << "\n " << ao.c_str(); ao.op(); std::cout << "\n\n"; revisedAddOp rao = std::string("I'm a revised string"); std::cout << "\n " << rao.c_str(); rao.op(ao); std::cout << "\n\n"; }