# Include <iostream> using namespace STD; Template <typename T> class operation {public: T numbera; t numberb; t numberresult; void setnumbera (t a) {numbera = ;} t getnumbera () {return numbera;} void setnumberb (t B) {numberb = B;} t getnumberb () {return numberb;} virtual t calculate () = 0; virtual void output () = 0 ;}; template <typename T> class operationadd: Public operation <t> {public: T calculate () {numberresult = numbera + numberb; Return numberresult;} void output () {cout <getnumbera () <"+" <getnumberb () <"=" <numberresult <Endl ;}; template <typename T> class operationsub: Public operation <t> {public: T calculate () {numberresult = numbera-numberb; return numberresult;} void output () {cout <getnumbera () <"-" <getnumberb () <"=" <numberresult <Endl ;}; template <typename T> class operationfactory {public: operationfactory () {condition = NULL;} operatio N <t> * handle; void produceoperation (char ch) {If (response! = NULL) delete operation; Switch (CH) {Case '+': condition = new operationadd <t>; break; Case '-': condition = new operationsub <t>; break; default: Break ;}}; int main () {operationfactory <double> operfctory; char ch; double numbera, numberb; do {cout <"input OPERATOR :"; cin> CH; If (CH = '0') break; operfctory. produceoperation (CH); cout <"input operand:"; CIN> numbera> numberb; operfctory. role-> setnumbera (numbera); operfctory. role-> setnumberb (numberb); operfctory. iterator-> calculate (); operfctory. outputs-> output ();} while (1); System ("pause"); Return 0 ;}