Advertisement
selebry

dasdfmasdlks\

Mar 26th, 2022
1,341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.66 KB | None | 0 0
  1. //Множественное наследование
  2. //
  3. //
  4. //Даны 8 классов, которые нумеруются от 1 до 8. Классы 2, 3, 4 и 5 наследованы от первого класса.Шестой класс от второго и третьего.Седьмой от четвертого и пятого.Восьмой от шестого и седьмого.
  5. //У каждого класса есть параметризированный конструктор с одним параметром строкового типа и закрытое свойство строкового типа для наименования объекта класса.
  6. //Значение данного свойства определяется в параметризированном конструкторе согласно шаблону :
  7. //
  8. //
  9. //«значение строкового параметра»_«номер класса»
  10. //
  11. //
  12. //В основной функции реализовать алгоритм :
  13. //1.     Объявить один указатель на объект класса x(где : x - номер класса, его надо определить).
  14. //2.     Объявить переменную строкового типа.
  15. //3.     Ввести значение строковой переменной.Вводимое значение является идентификатором.
  16. //4.     Создать объект класса 8 посредством параметризированного конструктора, передав в качестве аргумента строковую переменную.
  17. //5.     Адрес созданного объекта присвоить указателю на объект класса x.
  18. //6.     Используя только указатель на объект класса x вывести имена всех объектов в составе объекта класса 8 и имя самого объекта класса 8. Вывод выполнить построчно, упорядочивая согласно возрастанию номеров класса.Вывод реализовать в основной функции.
  19. //
  20. //
  21. //Наследственность реализовать так, чтобы всего объектов было 10.
  22.  
  23.  
  24.  
  25. #include <iostream>
  26. #include <typeinfo>
  27. using namespace std;
  28. static int cur_obj;
  29. class cl1 {
  30.     string name;
  31. public:
  32.     cl1(string name) : name(name + "_1") {}
  33.     virtual string get_name() { return name; }
  34.  
  35. };
  36. class cl2: public virtual cl1 {
  37.  
  38.     string name;
  39. public:
  40.     cl2(string name) : name(name + "_2"), cl1(name) {}
  41.     virtual string get_name() { return name; }
  42.  
  43. };
  44. class cl3 : public virtual cl1 {
  45. private:
  46.     string name;
  47. public:
  48.     cl3(string name) : name(name + "_3"), cl1(name) {}
  49.     virtual string get_name() { return name; }
  50.  
  51.  
  52. };
  53. class cl4 : public virtual cl1 {
  54.     string name;
  55. public:
  56.     cl4(string name) : name(name + "_4"), cl1(name) {}
  57.     virtual string get_name() { return name; }
  58.  
  59.  
  60. };
  61. class cl5 : public virtual cl1 {
  62.     string name;
  63. public:
  64.     cl5(string name) : name(name + "_5"), cl1(name) {}
  65.     virtual string get_name() { return name; }
  66.  
  67.  
  68. };
  69. class cl6:public  cl2, public  cl3 {
  70.  
  71.     string name;
  72. public:
  73.     cl6(string name) : name(name + "_6"), cl2(name), cl3(name),cl1(name) {}
  74.     virtual string get_name() { return name; }
  75.  
  76. };
  77. class cl7:public  cl4, public  cl5 {
  78.     string name;
  79. public:
  80.     cl7(string name) : name(name + "_7"), cl4(name), cl5(name),cl1(name) {}
  81.     virtual string get_name() { return name; }
  82.  
  83. };
  84. class cl8: public   cl6,public  cl7 {
  85.     string name;
  86. public:
  87.     cl8(string name) : name(name+"_8"),cl6(name),cl7(name), cl1(name) {}
  88.     static int count_up(string s) {
  89.         int n_class = int(s[8] - '0');
  90.         if (n_class == 1) return 1;
  91.         if (n_class >= 2 && n_class <= 5) return 0;
  92.         if (n_class == 6 || n_class == 7) return -1;
  93.         return -2;
  94.     }
  95.     string get_cur_name() {
  96.         if (cur_obj < 1)
  97.             return get_name();
  98.         switch (cur_obj) {
  99.         case 1:
  100.             return get_name();
  101.         case 2:
  102.             return cl2::get_name();
  103.         case 3:
  104.             return cl3::get_name();
  105.  
  106.         case 4:
  107.             return cl4::get_name();
  108.  
  109.         case 5:
  110.             return cl5::get_name();
  111.  
  112.         case 6:
  113.             return cl6::get_name();
  114.  
  115.         case 7:
  116.             return cl7::get_name();
  117.  
  118.         case 8:
  119.             return cl8::get_name();
  120.         }
  121.     }
  122.     string get_name() { return name; }
  123.  
  124. };
  125. int main() {
  126.     cl7* obj;
  127.     string name;
  128.     cin >> name;
  129.     cl8* obj8 = new cl8(name);
  130.     obj = obj8;
  131.     cur_obj = cl8::count_up(typeid(obj).name());
  132.     for (; cur_obj <= 8; cur_obj++) {
  133.         cout << ((cl8*)obj)->get_cur_name();
  134.         (cur_obj < 8) ? cout << '\n' : cout << "";
  135.     }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement