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

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

Восстановить пароль Регистрация
 
Desert Eagle
 Аватар для Desert Eagle
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 106
27.02.2012, 01:10     Полиморфизм. #1
Доброго времени суток.
Помогите решить следующую задачку: Создать класс периодическое издание (название, стоимость экземпляра и количество страниц) и классы газета ( количество экземпляров в неделю, стоимость подписки за год) и журнал ( вид переплета, стоимость подписки за год). Создать виртуальные методы; вывод информации и поиск по названию.
Вот мой вариант, но он не до конца рабочий. Подскажите в чем проблема и если можете, то исправьте программу.
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++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.02.2012, 01:44     Полиморфизм. #2
gazz::gazz сигнатуры прототипа и реализации не совпадают.
больше ошибок нет.
HardMorg
2 / 25 / 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
 Аватар для Desert Eagle
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 106
27.02.2012, 02:04  [ТС]     Полиморфизм. #4
Спасибо большое. Видимо, со стороны, действительно, виднее)
А сама программа правильно работает? Меня смущает условие "поиск по названию"...
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.02.2012, 02:26     Полиморфизм. #5
так вы запустите и проверьте
Desert Eagle
 Аватар для Desert Eagle
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 106
04.03.2012, 13:58  [ТС]     Полиморфизм. #6
Помогите реализовать поиск по названию издания или журнала. До сих пор не сумел придумать способ реализации...
Desert Eagle
 Аватар для 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++ С++ и полиморфизм
C++ Полиморфизм
C++ Полиморфизм

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

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

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