Наследование шаблонных классов. Добавление нового типа в унаследованных классах
Содержание
- 1. Общие сведения о наследовании шаблонов классов
- 2. Пример. Расширение типа A<TA>, B<TA, TB>, C<TA, TB, TC>
- Связанные темы
Поиск на других ресурсах:
1. Общие сведения о наследовании шаблонов классов
template <class T> class BaseClass { // ... }; template <class T> class DerivedClass : public BaseClass<T> { // ... };
- BaseClass, DerivedClass – соответственно базовый и унаследованный шаблоны классов, оперирующих обобщенным типом T.
template <class T> class BaseClass { // ... }; template <class T1, class T2> class DerivedClass : public BaseClass<T1> { // ... };
- BaseClass – базовый класс в иерархии шаблонных классов использующий обобщенный тип T;
- DerivedClass – унаследованный класс. Этот класс использует два обобщенных типа T1, T2.
⇑
2. Пример. Расширение типа A<TA>, B<TA, TB>, C<TA, TB, TC>
#include <iostream> using namespace std; template <class TA> class A { protected: TA value; public: A(TA value) : value(value) { } void Show() { cout << "A::value = " << value << endl; } TA Get() const { return value; } }; template <class TA, class TB> class B : public A<TA> { private: TB value; public: B(TA valueA, TB valueB) : A<TA>(valueA), value(valueB) { } void Show() { A<TA>::Show(); cout << "B::value = " << value << endl; } TA GetA() const { return A<TA>::value; } TB GetB() const { return value; } }; template <class TA, class TB, class TC> class C : public B<TA, TB> { private: TC value; public: // Конструктор C(TA valueA, TB valueB, TC valueC) : B<TA, TB>(valueA, valueB), value(valueC) { } void Show() { B<TA, TB>::Show(); cout << "C::value = " << value << endl; } TA GetA() const { return A<TA>::value; } TB GetB() const { return B<TA, TB>::value; } TC GetC() const { return value; } }; int main() { B<int, double> objB(10, 5.5); objB.Show(); C<int, float, double> objC(20, 2.5f, 7.3); objC.Show(); }
Связанные темы
- Наследование. Общие понятия. Использование модификаторов private, protected, public при наследовании
- Шаблон класса. Ключевое слово template. Преимущества шаблонов. Аргументы в шаблонах. Примеры
⇑