Home C++ Introduction Decisions Loops Input/Output Functions Stack and Heap References Arrays Searching and Sorting Pointers Character and Strings Structures Classes Inheritance Exceptions Templatess Recursion STL Modern C++ Misc Books ----

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