#ifndef TEMPLATEDEMO_H #define TEMPLATEDEMO_H ///////////////////////////////////////////////// // template demo.h // // classes classTemplate and modifiedClassTemplate // demonstrate full class templates under inheritance // // classes memberTemplate and modifiedMemberTemplate // show how that changes for member templates // #include ///////////////////////////////////////////////// // class classTemplate template class classTemplate { public: classTemplate(T t); virtual ~classTemplate(); virtual std::string announce(); std::string message(); protected: T _t; }; template classTemplate::classTemplate(T t) : _t(t) {} template classTemplate::~classTemplate() {} template std::string classTemplate::announce() { std::string temp = message(); temp += "\n base class classTemp\n"; return temp; } template std::string classTemplate::message() { std::ostringstream temp; temp << "\n template parameter value = " << _t; return temp.str(); } ///////////////////////////////////////////////// // class modifiedClassTemplate template class modifiedClassTemplate : public classTemplate { public: modifiedClassTemplate(T t); ~modifiedClassTemplate() {} std::string announce(); }; template modifiedClassTemplate::modifiedClassTemplate(T t) : classTemplate(t) {} template std::string modifiedClassTemplate::announce() { std::string temp = message(); temp += "\n derived class modifiedClassTemp\n"; return temp; } ///////////////////////////////////////////////// // class memberTemplate class memberTemplate { public: virtual ~memberTemplate() {} template std::string announce(T t); // can't be virtual virtual std::string message(); }; std::string memberTemplate::message() { return "\n memberTemplate: "; } template std::string memberTemplate::announce(T t) { ostringstream build; build << message(); build << "value of template parameter = " << t; return build.str(); } ///////////////////////////////////////////////// // class modifiedMemberTemplate class modifiedMemberTemplate : public memberTemplate { public: virtual ~modifiedMemberTemplate() {} virtual std::string message(); }; std::string modifiedMemberTemplate::message() { return "\n modifiedMemberTemplate: "; } #endif