Advertisement
bogolyubskiyalexey

Untitled

Mar 16th, 2021
719
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.12 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class Type {
  4. public:
  5.     Type() {
  6.         std::cout << "created" << std::endl;
  7.     }
  8.     ~Type() {
  9.         std::cout << "died" << std::endl;
  10.     }
  11.     int value = 0;
  12. };
  13.  
  14. class SomeClass {
  15. public:
  16.  
  17.     static Type field;
  18.     int counter = 0;
  19.     inline static int common_counter = 123;
  20.  
  21.     static SomeClass create(int value) {
  22.         if (value < 1000) {
  23.             throw std::invalid_argument("value less then 1000");
  24.         }
  25.         return SomeClass(value);
  26.     }
  27.  
  28. private:
  29.     SomeClass(int value) {
  30.         counter = value;
  31.     }
  32.  
  33. };
  34.  
  35. Type SomeClass::field;
  36.  
  37. const std::string NAME = "Alexey";
  38. const std::string& f() {
  39.     static std::string name = "Alexey";
  40.     return name;
  41. }
  42.  
  43. class Animal {
  44. public:
  45.     Animal(const std::string& name)
  46.         : name_(name)
  47.     {}
  48.  
  49.     virtual std::string Voice() const {
  50.         return "not implemented";
  51.     }
  52.     virtual ~Animal() {
  53.         std::cout << "Died animal: " << name_  << std::endl;
  54.     }
  55. private:
  56.     std::string name_;
  57. };
  58.  
  59. class Tiger : public Animal {
  60. public:
  61.     Tiger()
  62.         : Animal("without name")
  63.     {
  64.     }
  65.     Tiger(const std::string& name)
  66.         : Animal(name)
  67.     {}
  68.     virtual std::string Voice() const override {
  69.         return "rrrrrr";
  70.     }
  71.    
  72.     ~Tiger() {
  73.         std::cout << "Died tiger: " << Voice() << std::endl;
  74.     }
  75. };
  76.  
  77. class Wolf : public Animal {
  78. public:
  79.     using Animal::Animal;
  80.     std::string Voice() const override {
  81.         return "woooo";
  82.     }
  83. };
  84.  
  85. class Fox: public Animal {
  86.     using Animal::Animal;
  87. };
  88.  
  89.  
  90. class A {
  91. public:
  92.     A() {
  93.         std::cout << "A" << std::endl;
  94.     }
  95.     virtual ~A() {
  96.         std::cout << "~A" << std::endl;
  97.     }
  98. };
  99. class B : public A {
  100. public:
  101.     B() {
  102.         std::cout << "B" << std::endl;
  103.        
  104.         ptr = new int[1000];
  105.     }
  106.     ~B() {
  107.         delete ptr;
  108.         std::cout << "~B" << std::endl;
  109.     }
  110.     int* ptr;
  111. };
  112. class C : public B {
  113.     public:
  114.     C() {
  115.         std::cout << "C" << std::endl;
  116.     }
  117.     ~C() {
  118.         std::cout << "~C" << std::endl;
  119.     }
  120. };
  121.  
  122. int main() {
  123.     {
  124.     SomeClass a = SomeClass::create(1000000);
  125.     SomeClass b = SomeClass::create(1111111);
  126.     a.field.value++;
  127.     std::cout << a.field.value << std::endl;
  128.     b.field.value++;
  129.     std::cout << b.field.value << std::endl;
  130.     std::cout << &a.field << " vs " << &b.field << std::endl;
  131.     std::cout << &a.counter << " vs " << &b.counter << std::endl;
  132.     a.create(10000);
  133.     SomeClass::create(20000);
  134.     }
  135.  
  136.     Tiger t;
  137.     Wolf w("Alex");
  138.     Fox f("Bob");
  139.  
  140.     try {
  141.  
  142.         try {
  143.             ///....
  144.         } catch(...) {
  145.             std::cout << "";
  146.             throw;
  147.         }
  148.     }catch(...) {
  149.  
  150.     }
  151.  
  152.     {
  153.         Animal* t2 = new Tiger("Zoos");
  154.  
  155.         std::cout << t.Voice() << " " << w.Voice() << " " << f.Voice() << " " << t2->Voice()  << std::endl;
  156.         delete t2;
  157.     }
  158.     {
  159.         try {
  160.             A* ptr = new C;
  161.             delete ptr;
  162.         } catch(...) {
  163.             std::cout << "got exception" << std::endl;
  164.         }
  165.        
  166.     }
  167. }
  168.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement