Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

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

Полиморфизм. - C++

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

Доброго времени суток.
Помогите решить следующую задачку: Создать класс периодическое издание (название, стоимость экземпляра и количество страниц) и классы газета ( количество экземпляров в неделю, стоимость подписки за год) и журнал ( вид переплета, стоимость подписки за год). Создать виртуальные методы; вывод информации и поиск по названию.
Вот мой вариант, но он не до конца рабочий. Подскажите в чем проблема и если можете, то исправьте программу.
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();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2012, 01:10     Полиморфизм.
Посмотрите здесь:

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

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

полиморфизм - C++
Всем привет, изучаю С++ недавно, я новичек в этом языке программирования, читаю про ООП, понял все за исключением полиморфизма, что делает...

полиморфизм=( - C++
Ув.Знатаки Доброго времени суток!Вот есть проблемка с написание полиморфизма,вот написал класс,написал наследование,а вот как теперь сюда...

Полиморфизм - C++
не могу разобраться с полиморфизмом((( Вот как мне вычислить трапеции. У нее ведь три параметра, а не два как у прямоугольника???? ...

С++ и полиморфизм - C++
Здравствуйте. Ответьте пожалуйста на несколько вопросов: 1. Что такое абстрактная функция простыми словами? 2. Что такое...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.02.2012, 01:44     Полиморфизм. #2
gazz::gazz сигнатуры прототипа и реализации не совпадают.
больше ошибок нет.
HardMorg
3 / 26 / 3
Регистрация: 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 параметр
Desert Eagle
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 106
27.02.2012, 02:04  [ТС]     Полиморфизм. #4
Спасибо большое. Видимо, со стороны, действительно, виднее)
А сама программа правильно работает? Меня смущает условие "поиск по названию"...
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.02.2012, 02:26     Полиморфизм. #5
так вы запустите и проверьте
Desert Eagle
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 106
04.03.2012, 13:58  [ТС]     Полиморфизм. #6
Помогите реализовать поиск по названию издания или журнала. До сих пор не сумел придумать способ реализации...
Desert Eagle
0 / 0 / 0
Регистрация: 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();
};
а как сделать так, чтобы после самой проги была строчка, типа "введите имя" и при вводе Таймс или Форбс, программа выдавала соответствующий результат?
Cool-T
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 вообще не парится, выводит все сразу без проблем :]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 13:56     Полиморфизм.
Еще ссылки по теме:

Полиморфизм - C++
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс живущих с местоположением . Определить наследуемые классы -...

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

Полиморфизм - C++
полиморфизм runtime vs compile polymorphism: как вы на проектах определяете, когда стоит пользоваться шаблоном, а когда...

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

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


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

Или воспользуйтесь поиском по форуму:
Desert Eagle
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 106
11.03.2012, 13:56  [ТС]     Полиморфизм. #9
Спасибо большое! Только вот при запуске программа сразу начинает поиск по названию, а нужно, чтобы сначала вывела весь этот список, а лишь потом выскакивало сообщение "введите название"...
Yandex
Объявления
11.03.2012, 13:56     Полиморфизм.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru