Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Наследование шаблонных классов
Шаблонные классы можно наследовать, как и обычные классы. При использовании указателей важно помнить, что указатель на объект одной специализации нельзя присвоить указателю у которого специализация отличается. Иными словами, указателю на объект типа B<int>
нельзя присвоить адрес объекта типа B<double>
. Пример наследования шаблонных классов приведен в листинге 15.5.
Листинг 15.5. Наследование шаблонных классов
#include <iostream>
#include <typeinfo>
template<typename T> class A {
public:
T x;
A(T a): x(a) {}
virtual void func();
virtual ~A() {};
};
// Класс B наследует класс A
template<typename T> class B : public A<T> {
public:
T y;
B(T a, T b) : A<T>(b), y(a) {}
void func();
};
template<typename T>
void A<T>::func() { std::cout << "A::func()" << std::endl; }
template<typename T>
void B<T>::func() { std::cout << "B::func()" << std::endl; }
int main() {
A<int> *pA, a(30);
B<int> b(10, 20);
B<double> c(10.5, 20.3);
pA = &a;
pA->func(); // A::func()
pA = &b;
pA->func(); // B::func()
std::cout << typeid(a).name() << std::endl; // 1AIiE
std::cout << typeid(*pA).name() << std::endl; // 1BIiE
std::cout << typeid(c).name() << std::endl; // 1BIdE
return 0;
}
Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов