Полиморфизм.

Тема в разделе "Общие вопросы по С и С++", создана пользователем Waldemar, 6 мар 2012.

  1. Waldemar

    Waldemar Гость

    Доброго времени суток.
    Вот условие задания: Создать класс периодическое издание (название, стоимость экземпляра и количество страниц) и классы газета ( количество экземпляров, стоимость подписки за год) и журнал ( вид переплета, стоимость подписки за год). Создать виртуальные методы; вывод информации и поиск по названию.
    Код программы вот (он верный):
    Код (C++):
    #include <iostream>
    #include <string>
    #include <conio.h>

    using namespace std;
    class izdan {
    private:
    string nazv;
    float st;
    int str;
    int per;
    public:
    izdan (string, float, int, int);
    virtual void show_information (void);
    };
    izdan::izdan(std::string new_nazv, float new_st, int new_str, int new_per)
    {
    nazv=new_nazv;
    st=new_st;
    str=new_str;
    per=new_per;
    };
    void izdan::show_information (void)
    {
    cout<<"название издания "<<nazv<<endl;
    cout<<"стоимость экземпляра "<<st<<endl;
    cout<<"количество страниц "<<str<<endl;
    cout<<"периодичность "<<per<<endl;
    };
    class gazz: public izdan
    {
    private:
    int exz;
    int podp;
    public:
    gazz (string, float, int, int, int, int);
    void show_information(void);
    };
    gazz::gazz(string nazv1, float st1, int str1, int per1, int exz1, int podp1):izdan(nazv1, st1, str1, per1)
    {
    gazz::exz=exz1;
    gazz::podp=podp1;
    }
    void gazz::show_information(void)
    {
    izdan::show_information();
    cout<<"Количество экземпляров="<<exz<<endl;
    cout<<"Стоимость подписки="<<podp<<endl;
    }

    class jour: public izdan
    {
    private:
    string perepl;
    int podp;
    public:
    jour (string, float, int, int, string, int);
    void show_information(void);
    };
    jour::jour(string nazv1, float st1, int str1, int per1, string perepl1, int podp1):izdan(nazv1, st1, str1, per1)
    {
    jour::perepl=perepl1;
    jour::podp=podp1;
    }
    void jour::show_information(void)
    {
    izdan::show_information();
    cout<<"Тип переплета="<<perepl<<endl;
    cout<<"Стоимость подписки="<<podp<<endl;
    }

    int main ()
    {
    setlocale (LC_CTYPE, "Russian");
    izdan* group[4];
    group[0]=new izdan("Росмэн", 10500, 25, 2);
    group[1]=new izdan("Росмэн", 25500, 34, 2);
    group[2]=new gazz("Таймс", 13500, 31, 24, 5000, 45);
    group[3]=new jour("Форбс", 13500, 31, 12, "Обычный", 10);

    for (int i=0; i<4; i++)
    {
    cout<<"обьект номер"<<i+1<<endl;
    group[i]->show_information();
    };

    system("pause");
    getch();
    };
    Но как сделать поиск по имени я пока что не додумался. Помогите реализовать его.
    Заранее благодарен.
     
  2. qqwertty

    qqwertty Гость

    Вопрос: причем тут полиморфизм?

    Делаете метод у предка, возвращающий название журнала и функцию поиска, которая (возможно перебором) находит объекты из массива.
     
  3. Waldemar

    Waldemar Гость

    Как я понял, нужно в класс Izdan добавить метод, возвращающий название и потом в цикле сравнить строки. Но вот как это написать - для меня проблема... напишите код, пожалуста.
     
  4. qqwertty

    qqwertty Гость

    Т.е Все остальное вы написали, а это не можете? ;)

    Код (C++):
    #include <iostream>
    #include <string>
    #include <conio.h>

    using namespace std;
    class izdan {
    private:
    string nazv;
    float st;
    int str;
    int per;
    public:
    izdan (string, float, int, int);
    virtual void show_information (void);
    string GetName();
    };
    izdan::izdan(std::string new_nazv, float new_st, int new_str, int new_per)
    {
    nazv=new_nazv;
    st=new_st;
    str=new_str;
    per=new_per;
    };
    void izdan::show_information (void)
    {
    cout<<"название издания "<<nazv<<endl;
    cout<<"стоимость экземпляра "<<st<<endl;
    cout<<"количество страниц "<<str<<endl;
    cout<<"периодичность "<<per<<endl;
    };

    string izdan::GetName()
    {
    return nazv;
    }
    class gazz: public izdan
    {
    private:
    int exz;
    int podp;
    public:
    gazz (string, float, int, int, int, int);
    void show_information(void);
    };
    gazz::gazz(string nazv1, float st1, int str1, int per1, int exz1, int podp1):izdan(nazv1, st1, str1, per1)
    {
    gazz::exz=exz1;
    gazz::podp=podp1;
    }
    void gazz::show_information(void)
    {
    izdan::show_information();
    cout<<"Количество экземпляров="<<exz<<endl;
    cout<<"Стоимость подписки="<<podp<<endl;
    }

    class jour: public izdan
    {
    private:
    string perepl;
    int podp;
    public:
    jour (string, float, int, int, string, int);
    void show_information(void);
    };
    jour::jour(string nazv1, float st1, int str1, int per1, string perepl1, int podp1):izdan(nazv1, st1, str1, per1)
    {
    jour::perepl=perepl1;
    jour::podp=podp1;
    }
    void jour::show_information(void)
    {
    izdan::show_information();
    cout<<"Тип переплета="<<perepl<<endl;
    cout<<"Стоимость подписки="<<podp<<endl;
    }

    void Poisk(izdan **mas, int n, string what)
    {
    cout << "Найденные элементы: ";
    for(int i = 0; i < n; ++i)
    {
    if (mas[i]->GetName() == what)
    {
    cout << i << " ";
    }
    }
    cout << endl;
    }

    int main ()
    {
    setlocale (LC_CTYPE, "Russian");
    izdan* group[4];
    group[0]=new izdan("Росмэн", 10500, 25, 2);
    group[1]=new izdan("Росмэн", 25500, 34, 2);
    group[2]=new gazz("Таймс", 13500, 31, 24, 5000, 45);
    group[3]=new jour("Форбс", 13500, 31, 12, "Обычный", 10);

    for (int i=0; i<4; i++)
    {
    cout<<"обьект номер"<<i+1<<endl;
    group[i]->show_information();
    };
    Poisk(group, 4, "Таймс");
    getch();
    };
     
  5. Waldemar

    Waldemar Гость

    По уже написанному было что-то вроде трафарета, а метод поиска самому нужно организовать.

    Кстати, поиск ведь не так должен работать, насколько я понимаю.... В конце надо строчку сделать, типа "ввидите имя" , а прога выдаст соответствующий журнал или газету с теми данными, которые уже запилены в них.
     
  6. qqwertty

    qqwertty Гость

    Это вам в раздел: "Решите мне задачу". Если хотите, чтобы за вас всю лабу написали, так и указывайте в вопросе.
     
Загрузка...
Похожие Темы - Полиморфизм
  1. Sander
    Ответов:
    1
    Просмотров:
    508
  2. facefull
    Ответов:
    4
    Просмотров:
    1.000

Поделиться этой страницей