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

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

Войти
Регистрация
Восстановить пароль
 
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
#1

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

12.10.2013, 12:11. Просмотров 292. Ответов 6
Метки нет (Все метки)

Пробую занести в отображение пользовательские обьекты. потом ввожу нужное имя, и мне должно вывести нужный обьект. В книжке Лафоре нашел только реализацию отображения для стандартных типов. Попробовал переделать для своего класса, но работает не правильно. в конце выводит насколько я понял какието адрессы.

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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2013, 12:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Занесение в отображение пользовательских обьектов (C++):

Использование потокового итератора для пользовательских обьектов - C++
Надо с помощю итератора ofstream_iterator вывести содержимое множины, в которой есть обьекты пользовательського типа. Вот что я пока...

массив обьектов - C++
здравствуйте! подскажите пожалуйста, что такое обьект массивов? ( искал в учебниках и в интернете тоже,но ничего написанного об этом не...

программа на массив обьектов - C++
Доброе время суток! здесь я попытался написать простенькую программу на массив обьектов,но есть ошибки,я вижу пока только одну,не могли...

Количество обьектов в файле - C++
У меня есть метод, который достает из файла поля обьектов и обрабатывает в соответствии с определенными параметрами. Так вот эти поля...

Заполнить коллекцию обьектов - C++
Добрий день, нуждаюсь в помощи. Первый раз столкнулся с тем, чтобы создать коллекцию Студентов. Создал vector&lt;Student&gt; obj, но не вижу...

Количество обьектов в классе - C++
Здравствуйте! Имеется во такой класс: class MyClass { private: int tos=0; int stack; public: MyClass() //Konstructor

6
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.10.2013, 12:30 #2
o33ik, попробуйте для начала минимизировать задачу. Добиться минимального по кол-ву строк кода, который работает неправильно.
1
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
12.10.2013, 12:54  [ТС] #3
Tulosba, не очень понял что вы сказали. тогда так. у меня есть некий класс, одно поле етого класса name. как мне занести обьекты етого класса в отображение, так чтоб name было ключем, а сам обьект значением? Я думаю такое возможно, так как задание требует етого. И если ключ ссылаеться на обьект, то можно ли за ключем вызвать метод для нужного обьекта? типа:
C++
1
mapObj[key].method();
Чтоб можно было найти обьект за его именем, и потом вызвать для него нужный метод.
0
ninja2
231 / 187 / 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_метод().
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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");
}
То, что Вам нужно или нет?
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 13:10 #6
o33ik, и что, собственно, неправильно?
1
Миниатюры
Занесение в отображение пользовательских обьектов  
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
12.10.2013, 19:04  [ТС] #7
alsav22, спасибо, я понял в чем была ошибка. я имя обьекта вводил через getLine, а ключ для поиска просто через cin, и когда вводил слово с пробелом оно считивалось до пробела.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 19:04
Привет! Вот еще темы с ответами:

Синтаксис классов и обьектов - C++
Всем привет, занимаюсь созданием программы работы с векторами, дак вот, как правильно написать такой код, который бы создавал n-ое...

Цикл для обьектов - C++
Здрасти. У меня есть много обьектов класса przedmiot. Какой цикл может в main.cpp помочь исполнить функцию выписывания &quot;p_wypisz&quot; для всех...

Программирование пользовательских функций - C++
Помогите с програмкой) С клавиатуры ввести текст, признаком конца ввода считать точку. Создать две функции для работы с текстом: ...

Преобразование пользовательских типов - C++
Здравствуйте. Помогите с одним вопросом, это пример из книги Лафоре ООП С++, не могу разобраться как работают функции int getHrs() const ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
12.10.2013, 19:04
Ответ Создать тему
Опции темы

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