Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <array>
- template <class T1>
- class BaseA
- {
- protected:
- T1 fieldA;
- public:
- BaseA(T1 val) : fieldA { val } { std::cout << "BaseA constructed for " << this << '\n'; };
- BaseA() : BaseA{ 65 } {};
- ~BaseA() { std::cout << "BaseA destructed for " << this << '\n'; }
- void print() { std::cout << "BaseA: " << fieldA << '\n'; };
- };
- //template <class T1>
- //class BaseA<T1*>
- //{
- //protected:
- // T1* fieldA;
- //public:
- // BaseA(T1* val) : fieldA{ new T1{*val} } { std::cout << "BaseA constructed for " << this << '\n'; };
- // //BaseA() : BaseA{ 65 } {};
- // ~BaseA() { delete fieldA; std::cout << "BaseA destructed for " << this << '\n'; }
- // void print() { std::cout << "BaseA: " << *fieldA << '\n'; };
- //};
- template <class T1, class T2>
- class Child : public BaseA<T1>
- {
- T2 fieldC;
- public:
- Child(T2 val, T1 inherVal) : BaseA<T1>{inherVal}, fieldC{ val } { std::cout << "Child constructed for " << this << '\n'; };
- Child() : Child { 66, 68 } {};
- ~Child() { std::cout << "Child destructed for " << this << '\n'; }
- void print() { std::cout << "Child: " << fieldC << " BaseA => fieldA = " << BaseA<T1>::fieldA << '\n'; };
- };
- template <class T1>
- class ChildFull : public BaseA<T1>
- {
- char fieldC;
- public:
- ChildFull(char val, T1 inherVal) : BaseA<T1>{ inherVal }, fieldC{ val } { std::cout << "ChildFull constructed for " << this << '\n'; };
- ChildFull() : ChildFull{ 66, 68 } {};
- ~ChildFull() { std::cout << "ChildFull destructed for " << this << '\n'; }
- void print() { std::cout << "ChildFull: " << fieldC << " BaseA => fieldA = " << BaseA<T1>::fieldA << '\n'; };
- };
- int main()
- {
- BaseA<int> b;
- b.print();
- Child<int, char> c;
- c.print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement