C++ Tutorial/template/virtual template

Материал из C\C++ эксперт
Перейти к: навигация, поиск

virtual template

<source lang="cpp">/* The following code example is taken from the book

* "C++ Templates - The Complete Guide"
* by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
*
* (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>

class NotVirtual { }; class Virtual {

 public:
   virtual void foo() {
   }

}; template <typename VBase> class Base : private VBase {

 public:
   // the virtuality of foo() depends on its declaration
   // (if any) in the base class VBase
   void foo() {
      std::cout << "Base::foo()" << "\n";
   }

}; template <typename V> class Derived : public Base<V> {

 public:
   void foo() {
      std::cout << "Derived::foo()" << "\n";
   }

}; int main() {

   Base<NotVirtual>* p1 = new Derived<NotVirtual>;
   p1->foo();  // calls Base::foo()
   Base<Virtual>* p2 = new Derived<Virtual>;
   p2->foo();  // calls Derived::foo()

}</source>

Base::foo()
Derived::foo()