Templates
Contents
Class Template Inheritance
We can have a derived class pass it's template parameter to the base class.File: der1.cpp
#include <iostream> #include <string> using namespace std ; template <typename T> class Base { public: T baseDataMember ; Base( T baseDataMemberP ) { baseDataMember = baseDataMemberP ; } void func() { // (1) std::cout << "baseDataMember: " << baseDataMember << endl ; } }; template <typename T> class Derived: public Base<T> { public: Derived( T param1 ) : Base<T>( param1 ) { } void method1() { // (2) Base<T>::func() ; } }; int main(){ std::cout << '\n'; Derived<string> derived("Testing") ; //derived.baseDataMember = "Testing" ; derived.method1() ; std::cout << '\n'; } $ g++ der1.cpp ; ./a.exe baseDataMember: Testing
File: der2.cpp
#include <iostream> #include <string> using namespace std ; template <typename T> class Base { public: T baseDataMember ; Base( T baseDataMemberP ) { baseDataMember = baseDataMemberP ; } void func() { // (1) std::cout << "baseDataMember: " << baseDataMember << endl ; } }; template <typename T> class Derived: public Base<T> { public: Derived( T param1 ) : Base<T>( param1 ) { } void method1() { // (2) Base<T>::func() ; } }; template <> class Derived<int>: public Base<int> { public: Derived( int param1 ) : Base<int>( param1 ) { } void method1() { // (2) Base<int>::func() ; } }; int main(){ std::cout << '\n'; Derived<string> derived("Testing") ; //derived.baseDataMember = "Testing" ; derived.method1() ; std::cout << '\n'; } $ g++ der2.cpp ; ./a.exe baseDataMember: Testing