Аватар для Desert Eagle
0 / 0 / 1
Регистрация: 18.09.2010
Сообщений: 106
1

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

27.02.2012, 01:10. Показов 1350. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Помогите решить следующую задачку: Создать класс периодическое издание (название, стоимость экземпляра и количество страниц) и классы газета ( количество экземпляров в неделю, стоимость подписки за год) и журнал ( вид переплета, стоимость подписки за год). Создать виртуальные методы; вывод информации и поиск по названию.
Вот мой вариант, но он не до конца рабочий. Подскажите в чем проблема и если можете, то исправьте программу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream> 
#include <string> 
#include <conio.h>
 
using namespace std;
class izdan {
private:
    string nazv;
    float st;
    int str;
public: 
    izdan (string, float, int);
    virtual void show_information (void);
};
izdan::izdan(std::string new_nazv, float new_st, int new_str)
{
    nazv=new_nazv;
    st=new_st;
    str=new_str;
};
void izdan::show_information (void)
{
cout<<"название издания "<<nazv<<endl;
cout<<"стоимость экземпляра "<<st<<endl;
cout<<"количество страниц "<<str<<endl;
};
class gazz: public izdan
{
private:
    int exz;
    int podp;
public: 
    gazz (string, float, int, int, int);
    void show_information(void);
};
gazz::gazz(string nazv1, float st1, int str1, int exz1, int podp1):izdan(nazv1, st1, str1)
{
    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, int);
    void show_information(void);
};
jour::jour(string nazv1, float st1, int str1, string perepl1, int podp1):izdan(nazv1, st1, str1)
{
    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);
    group[1]=new izdan("росмэн", 25500, 34);
    group[2]=new gazz("мурзилка", 13500, 31, 5000, 45);
    group[3]=new jour("миша", 13500, 31, "обычный", 10);
 
    for (int i=0; i<4; i++)
    {
        cout<<"обьект номер"<<i+1<<endl;
        group[i]->show_information();
    };
    
system("pause");
        getch();
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2012, 01:10
Ответы с готовыми решениями:

Полиморфизм
Я хотел реализовать множество, используя множественное наследование, но когда написал template &lt;class T&gt; class set { ...

Полиморфизм
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом динамично их создавать ,то можно вызывать...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - &quot;Страна&quot; и &quot;Представитель&quot;....

8
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
27.02.2012, 01:44 2
gazz::gazz сигнатуры прототипа и реализации не совпадают.
больше ошибок нет.
0
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
27.02.2012, 02:00 3
Цитата Сообщение от OstapBender Посмотреть сообщение
gazz::gazz сигнатуры прототипа и реализации не совпадают.
больше ошибок нет.
вы чючють ошиблись
jour (string, float, int, int, int);
jour::jour(string nazv1, float st1, int str1, string perepl1, int podp1)

не совпадает тут 4 параметр
2
 Аватар для Desert Eagle
0 / 0 / 1
Регистрация: 18.09.2010
Сообщений: 106
27.02.2012, 02:04  [ТС] 4
Спасибо большое. Видимо, со стороны, действительно, виднее)
А сама программа правильно работает? Меня смущает условие "поиск по названию"...
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
27.02.2012, 02:26 5
так вы запустите и проверьте
0
 Аватар для Desert Eagle
0 / 0 / 1
Регистрация: 18.09.2010
Сообщений: 106
04.03.2012, 13:58  [ТС] 6
Помогите реализовать поиск по названию издания или журнала. До сих пор не сумел придумать способ реализации...
0
 Аватар для Desert Eagle
0 / 0 / 1
Регистрация: 18.09.2010
Сообщений: 106
11.03.2012, 00:51  [ТС] 7
Вот, пробовал сделать этот несчастный поиск, что получилось:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#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();
};
а как сделать так, чтобы после самой проги была строчка, типа "введите имя" и при вводе Таймс или Форбс, программа выдавала соответствующий результат?
0
20 / 13 / 1
Регистрация: 17.12.2010
Сообщений: 34
11.03.2012, 04:08 8
Если я правильно понял, то
1) Заменить в Poisk
cout << i << " "; на mas[i]->show_information();
2) В необходимом месте ввести допустим
C++
1
2
3
4
5
        cout << "Введите название:";
    string zapros;
    cin >> zapros;
    cout << "\n Поиск \"" << zapros << "\".\n";
    Poisk(group, 4, zapros);
Но из-за setlocale и кодировки виндосовской консоли(OEM), zapros если вводить кириллицей, то кракозябры получаются, и поиск кракозябр не работает. Вот с кодировками не знаю что делать, я использую
C++
1
2
3
#include <windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
И кодировку в консоли Lucida Console.
Так как я только начал изучать язык, и запускаю всё только у себя. Хотя чаше пишу просто транслитом.

Поищите про кодировки и виндосовскую консоль в интернете.
Надеюсь хоть чем-то помог)

Добавлено через 25 минут
В прикрепленном топике рассмотрены все варианты с кодировкой)

Что-то удобней если пишешь для себя, что-то если для windows. А linux вообще не парится, выводит все сразу без проблем :]
1
 Аватар для Desert Eagle
0 / 0 / 1
Регистрация: 18.09.2010
Сообщений: 106
11.03.2012, 13:56  [ТС] 9
Спасибо большое! Только вот при запуске программа сразу начинает поиск по названию, а нужно, чтобы сначала вывела весь этот список, а лишь потом выскакивало сообщение "введите название"...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2012, 13:56
Помогаю со студенческими работами здесь

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно переопределить виртуальную функцию...

Полиморфизм
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout &lt;&lt; &quot;Constructor MyPrint&quot; &lt;&lt; endl; } virtual...

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое полиморфизм. Можно ли как-то просто и...

Полиморфизм
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как и для чего он нужен

Полиморфизм c++
Построить массив из указателей (базового типа) на объекты обоих классов. Выбрать объекты производного класса, отсортировать их и сложить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
Реактивное программировани­е с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru