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

Занесение в отображение пользовательских обьектов - C++

Восстановить пароль Регистрация
 
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
12.10.2013, 12:11     Занесение в отображение пользовательских обьектов #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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
//#pragma warning (disable:4786)
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
const int current_уear = 2013;
const int arr_size = 3;
class Date
{
    int dd;
    int mm;
    int yy;
public:
    Date::Date()
    {
        dd = 0;
        mm = 0;
        yy = 0;
    }
    Date::Date(int _dd, int _mm, int _yy)
    {
        dd = _dd;
        mm = _mm;
        yy = _mm;
    }
    void setDate()
    {
        int _dd, _mm, _yy;
        bool B=true;
        while(B)
        {
            cout << "\nEnter new date: ";
            cin >> _dd  >> _mm >> _yy;
            if(_dd > 31 || _mm > 12 || _yy < current_уear-5 || _yy > current_уear+1)
            {
                cout <<  "\nInvalid date. Try again.";
                system("pause");
                system("cls");
                continue;
            }
            if(_mm == 4 || _mm == 6 || _mm == 9 || _mm == 11 && _dd>30)
            {
                cout << "\nInvalid date. Entered month haven`t more 30 days.";
                system("pause");
                system("cls");
                continue;
            }
            if(_mm == 2 && _dd>29)
            {
                cout << "\nInvalid date. Entered month haven`t more 29  days.";
                system("pause");
                system("cls");
                continue;
            }
            else 
            {
                dd = _dd; mm = _mm; yy = _yy;
                B = false;
            }
        }
    }
    void show_date()
    {
        cout << "Date: " << dd << '.' << mm << '.' << yy;
    }
};
 
class Good
{
    string name;
    Date date;
    double price;
    int count;
    int number;
public:
    Good::Good()
    {
    }
    void input()
    {
        cout << "\nEnter name: ";
        cin.sync();
        getline (cin, name);
        system("cls");
        date.setDate();
        system("cls");
        cout << "\nEnter price: ";
        cin >> price;
        system("cls");
        cout << "\nEnter count: ";
        cin >> count;
        system("cls");
        cout << "\nEnter number: ";
        cin >> number;
        system("cls");
    }
    void output()
    {
        cout << "\nName: " << name << endl;
        date.show_date();
        cout << "\nPrice: " << price;
        cout << "\nCount: " << count;
        cout << "\nCost: " << calculate_cost();
        cout << "\nNumber: " << number;
        system("pause");
        system("cls");  
    }
    void set_price()
    {
        cout << "\nEnter new price: ";
        cin >> price;
        system("cls");
    }
    void change_count()
    {
        cout <<"\nAdd or subtract?";
        string choise;
        bool B = true;
        while(B)
        {
            cin >> choise;
            if(choise != "add" || choise != "subtract")
                cout << "\nInvalid choise. Try again(add of subtract).";
            else B = false;
            system("cls");
        }
        cout << "\nEnter value:";
        int value;
        cin >> value;
        if (choise == "add")
            count =+value;
        if (choise == "subtract")
            count=-value;
        cout << "\nNew count: " << count;
        system("cls");
    }
    double calculate_cost()
    {
        return count*price;
    }
    void toString()
    {
        cout << "\nCost = " << calculate_cost();
 
    }
    string returnName()
    {
        return name;
    }
};
 
void main()
{
    Good arr[arr_size];
    for (int i=0;i<arr_size; i++)
    {
        arr[i].input();
    }
    string name; 
    Good obj;
    map<string, Good, less<string> > MapGoods;
    for(int j = 0; j < arr_size; j++)       
    {       
        name = arr[j].returnName();    
        obj = arr[j];       
        MapGoods[name] = obj;   
    }
    cout << "\nFind. Enter name: ";
    cin >> name;
    obj = MapGoods[name];
    obj.output();
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.10.2013, 12:30     Занесение в отображение пользовательских обьектов #2
o33ik, попробуйте для начала минимизировать задачу. Добиться минимального по кол-ву строк кода, который работает неправильно.
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
12.10.2013, 12:54  [ТС]     Занесение в отображение пользовательских обьектов #3
Tulosba, не очень понял что вы сказали. тогда так. у меня есть некий класс, одно поле етого класса name. как мне занести обьекты етого класса в отображение, так чтоб name было ключем, а сам обьект значением? Я думаю такое возможно, так как задание требует етого. И если ключ ссылаеться на обьект, то можно ли за ключем вызвать метод для нужного обьекта? типа:
C++
1
mapObj[key].method();
Чтоб можно было найти обьект за его именем, и потом вызвать для него нужный метод.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.10.2013, 13:03     Занесение в отображение пользовательских обьектов #4
Цитата Сообщение от o33ik Посмотреть сообщение
И если ключ ссылаеться на обьект, то можно ли за ключем вызвать метод для нужного обьекта? типа
Да можно, токо mapObj должен быть массивом объектов или указателей на нужный объект, что то вроде этого:
map<string Obj> mapObj; , тогда мы можем записать mapObj["one"]=Obj("one"); и mapObj["two"]=Obj("two"); допустим так, и обращаться уже к этим объектам можно через mapObj["one"].любой_public_метод().
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.10.2013, 13:09     Занесение в отображение пользовательских обьектов #5
Цитата Сообщение от o33ik Посмотреть сообщение
не очень понял что вы сказали.
Хотел сказать только то, что желательно минимизировать код, в котором просите помочь с поиском ошибок.
Вот пример кода:
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
#include <iostream>
#include <map>
#include <string>
#include <cstdlib>
 
struct S
{
    std::string name;
    int value;
    void f() { std::cout << value << std::endl; }
};
 
void main()
{
    std::map<std::string, S> m;
 
    S s1 = { "vasya", 42 };
    S s2 = { "petya", 100500 };
 
    m[s1.name] = s1;
    m[s2.name] = s2;
 
    m[s1.name].f();
 
    system("pause");
}
То, что Вам нужно или нет?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 13:10     Занесение в отображение пользовательских обьектов #6
o33ik, и что, собственно, неправильно?
Миниатюры
Занесение в отображение пользовательских обьектов  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 19:04     Занесение в отображение пользовательских обьектов
Еще ссылки по теме:

Цикл для обьектов C++
C++ Количество обьектов в файле
Заполнить коллекцию обьектов C++
C++ Синтаксис классов и обьектов
C++ Количество обьектов в классе

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

Или воспользуйтесь поиском по форуму:
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
12.10.2013, 19:04  [ТС]     Занесение в отображение пользовательских обьектов #7
alsav22, спасибо, я понял в чем была ошибка. я имя обьекта вводил через getLine, а ключ для поиска просто через cin, и когда вводил слово с пробелом оно считивалось до пробела.
Yandex
Объявления
12.10.2013, 19:04     Занесение в отображение пользовательских обьектов
Ответ Создать тему
Опции темы

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