Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Множественное наследование
- //
- //
- //Даны 8 классов, которые нумеруются от 1 до 8. Классы 2, 3, 4 и 5 наследованы от первого класса.Шестой класс от второго и третьего.Седьмой от четвертого и пятого.Восьмой от шестого и седьмого.
- //У каждого класса есть параметризированный конструктор с одним параметром строкового типа и закрытое свойство строкового типа для наименования объекта класса.
- //Значение данного свойства определяется в параметризированном конструкторе согласно шаблону :
- //
- //
- //«значение строкового параметра»_«номер класса»
- //
- //
- //В основной функции реализовать алгоритм :
- //1. Объявить один указатель на объект класса x(где : x - номер класса, его надо определить).
- //2. Объявить переменную строкового типа.
- //3. Ввести значение строковой переменной.Вводимое значение является идентификатором.
- //4. Создать объект класса 8 посредством параметризированного конструктора, передав в качестве аргумента строковую переменную.
- //5. Адрес созданного объекта присвоить указателю на объект класса x.
- //6. Используя только указатель на объект класса x вывести имена всех объектов в составе объекта класса 8 и имя самого объекта класса 8. Вывод выполнить построчно, упорядочивая согласно возрастанию номеров класса.Вывод реализовать в основной функции.
- //
- //
- //Наследственность реализовать так, чтобы всего объектов было 10.
- #include <iostream>
- #include <typeinfo>
- using namespace std;
- static int cur_obj;
- class cl1 {
- string name;
- public:
- cl1(string name) : name(name + "_1") {}
- virtual string get_name() { return name; }
- };
- class cl2: public virtual cl1 {
- string name;
- public:
- cl2(string name) : name(name + "_2"), cl1(name) {}
- virtual string get_name() { return name; }
- };
- class cl3 : public virtual cl1 {
- private:
- string name;
- public:
- cl3(string name) : name(name + "_3"), cl1(name) {}
- virtual string get_name() { return name; }
- };
- class cl4 : public virtual cl1 {
- string name;
- public:
- cl4(string name) : name(name + "_4"), cl1(name) {}
- virtual string get_name() { return name; }
- };
- class cl5 : public virtual cl1 {
- string name;
- public:
- cl5(string name) : name(name + "_5"), cl1(name) {}
- virtual string get_name() { return name; }
- };
- class cl6:public cl2, public cl3 {
- string name;
- public:
- cl6(string name) : name(name + "_6"), cl2(name), cl3(name),cl1(name) {}
- virtual string get_name() { return name; }
- };
- class cl7:public cl4, public cl5 {
- string name;
- public:
- cl7(string name) : name(name + "_7"), cl4(name), cl5(name),cl1(name) {}
- virtual string get_name() { return name; }
- };
- class cl8: public cl6,public cl7 {
- string name;
- public:
- cl8(string name) : name(name+"_8"),cl6(name),cl7(name), cl1(name) {}
- static int count_up(string s) {
- int n_class = int(s[8] - '0');
- if (n_class == 1) return 1;
- if (n_class >= 2 && n_class <= 5) return 0;
- if (n_class == 6 || n_class == 7) return -1;
- return -2;
- }
- string get_cur_name() {
- if (cur_obj < 1)
- return get_name();
- switch (cur_obj) {
- case 1:
- return get_name();
- case 2:
- return cl2::get_name();
- case 3:
- return cl3::get_name();
- case 4:
- return cl4::get_name();
- case 5:
- return cl5::get_name();
- case 6:
- return cl6::get_name();
- case 7:
- return cl7::get_name();
- case 8:
- return cl8::get_name();
- }
- }
- string get_name() { return name; }
- };
- int main() {
- cl7* obj;
- string name;
- cin >> name;
- cl8* obj8 = new cl8(name);
- obj = obj8;
- cur_obj = cl8::count_up(typeid(obj).name());
- for (; cur_obj <= 8; cur_obj++) {
- cout << ((cl8*)obj)->get_cur_name();
- (cur_obj < 8) ? cout << '\n' : cout << "";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement