Advertisement
avr39ripe

PV913TemplateInheritance

Jul 22nd, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <array>
  3.  
  4. template <class T1>
  5. class BaseA
  6. {
  7. protected:
  8.     T1 fieldA;
  9. public:
  10.     BaseA(T1 val) : fieldA { val } { std::cout << "BaseA constructed for " << this << '\n'; };
  11.     BaseA() : BaseA{ 65 } {};
  12.     ~BaseA() { std::cout << "BaseA destructed for " << this << '\n'; }
  13.     void print() { std::cout << "BaseA: " << fieldA << '\n'; };
  14. };
  15.  
  16. //template <class T1>
  17. //class BaseA<T1*>
  18. //{
  19. //protected:
  20. //  T1* fieldA;
  21. //public:
  22. //  BaseA(T1* val) : fieldA{ new T1{*val} } { std::cout << "BaseA constructed for " << this << '\n'; };
  23. //  //BaseA() : BaseA{ 65 } {};
  24. //  ~BaseA() { delete fieldA;  std::cout << "BaseA destructed for " << this << '\n'; }
  25. //  void print() { std::cout << "BaseA: " << *fieldA << '\n'; };
  26. //};
  27.  
  28. template <class T1, class T2>
  29. class Child : public BaseA<T1>
  30. {
  31.     T2 fieldC;
  32. public:
  33.     Child(T2 val, T1 inherVal) : BaseA<T1>{inherVal}, fieldC{ val } { std::cout << "Child constructed for " << this << '\n'; };
  34.     Child() : Child { 66, 68 } {};
  35.     ~Child() { std::cout << "Child destructed for " << this << '\n'; }
  36.     void print() { std::cout << "Child: " << fieldC << " BaseA => fieldA = " << BaseA<T1>::fieldA << '\n'; };
  37. };
  38.  
  39. template <class T1>
  40. class ChildFull : public BaseA<T1>
  41. {
  42.     char fieldC;
  43. public:
  44.     ChildFull(char val, T1 inherVal) : BaseA<T1>{ inherVal }, fieldC{ val } { std::cout << "ChildFull constructed for " << this << '\n'; };
  45.     ChildFull() : ChildFull{ 66, 68 } {};
  46.     ~ChildFull() { std::cout << "ChildFull destructed for " << this << '\n'; }
  47.     void print() { std::cout << "ChildFull: " << fieldC << " BaseA => fieldA = " << BaseA<T1>::fieldA << '\n'; };
  48. };
  49.  
  50. int main()
  51. {
  52.     BaseA<int> b;
  53.     b.print();
  54.  
  55.     Child<int, char> c;
  56.     c.print();
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement