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

Ошибка в коде при использовании класов - C++

Восстановить пароль Регистрация
 
Алена5
2 / 2 / 0
Регистрация: 17.05.2010
Сообщений: 68
31.08.2010, 18:33     Ошибка в коде при использовании класов #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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
using namespace std;
class Hello
{
    int money, money_prize;;
public:
    Hello()
    {
 
        money=0;
        money_prize=0;
    }
    void Initial( int m)
    {
        money=m;
    }
    int getMoney()
    {
        return money;
    }
    int getMoney_prize()
    {
        return money_prize;
    }
 
    void Hello_user()
    {
        
            money=25;
            cout<<"\n\n\t\t\t\tДобро пожаловать в игру. \n\tЗа регистрацию в системе на ваш баланс была положена сумма в 25$\n";
        
        
    }
    void Money(int money_prize)
    {
 
        money=money+money_prize;
        cout<<"\n\t\t\t\tНа вашем счету "<<money<<"$\n";
        Initial(money);
    }
 
};
class Pack
{
 
    int money_prise[8];
public:
    Pack()
    {
        money_prise[1]=0;
    }
        void Get_a_prize()
    {
        
                money_prise[1]=15;
                int prise=money_prise[1];
                Hello money;
                money.Money(prise);
                        
    }
 
 
    };
 
void main()
{
    setlocale(LC_ALL,"rus");
    Hello hy;
    hy.Hello_user();
    Pack p;
    p.Get_a_prize();
    
 
}
.
Подскажите, пожалуйста, почему программка показывает неправильную сумму и как єто исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2010, 18:33     Ошибка в коде при использовании класов
Посмотрите здесь:

C++ ошибка при использовании delete
Ошибка при использовании конструктора C++
Ошибка при использовании STL C++
Ошибка при использовании вектора C++
Ошибка при использовании new[] / delete[] C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rockedit
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1752 / 558 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
31.08.2010, 18:43     Ошибка в коде при использовании класов #2
А сколько показывает? судя по коду должно вывестить 40.
Алена5
2 / 2 / 0
Регистрация: 17.05.2010
Сообщений: 68
31.08.2010, 18:48  [ТС]     Ошибка в коде при использовании класов #3
Цитата Сообщение от Rockedit Посмотреть сообщение
А сколько показывает? судя по коду должно вывестить 40.
А показывает 15
Оно переменную money обнуляэт!
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 18:52     Ошибка в коде при использовании класов #4
Было бы странно если бы не обнуляло
Rockedit
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1752 / 558 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
31.08.2010, 18:53     Ошибка в коде при использовании класов #5
Точно, 15...конечно обнуляет, Вы же создаете новый экземпляр класса, а в конструкторе идет обнуление.
C++
1
2
3
4
5
  money_prise[1]=15;
                        int prise=money_prise[1];
                                Hello money;
                                money.Hello_user();
                                money.Money(prise);
Это убрать
C++
1
2
        Hello hy;
        hy.Hello_user();
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.08.2010, 18:56     Ошибка в коде при использовании класов #6
Алена5, Если бы Ваш код выглядел хотя бы вот так, было бы куда лучше:
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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
 
using namespace std;
 
class Hello
{
public:
    Hello()
    {
        money=0;
        money_prize=0;
    }
    
    void Initial(int m)
    {
        money = m;
    }
    
    int getMoney()
    {
        return money;
    }
    
    int getMoney_prize()
    {
        return money_prize;
    }
 
    void Hello_user()
    {    
        // Старайтесь избегать длинных строк и 
        // разделять операторы от операндов пробелами. 
        // Иначе получается беспорядочная каша недоступная для понимания.
        
        money = 25;
        cout << "\n\n\t\t\t\tДобро пожаловать в игру.\n"
                "\tЗа регистрацию в системе на ваш баланс была положена сумма в 25$\n";         
    }
    
    void Money(int money_prize)
    {
        money = money + money_prize;
        cout << "\n\t\t\t\tНа вашем счету " << money << "$" << std::endl;
        Initial(money);
    }
 
private:
    // В Си++ принято приватные данные располагать внизу класса
    // это хорошая традиция, делающая Ваш код более удобным для чтения.
    // Еще здесь было два знака ;
    
    int money;
    int money_prize;         
};
 
class Pack
{
public:
    Pack()
    {
        money_prise[1]=0;
    }
    
    void Get_a_prize()
    {
        money_prise[1]=15;
        int prise=money_prise[1];
        Hello money;
        money.Money(prise);
    }
 
private:
    int money_prise[8];
};
 
void main()
{
    setlocale(LC_ALL,"rus");
    
    Hello hy;
    hy.Hello_user();
    
    Pack p;
    p.Get_a_prize();
}
Следите за тем, что пишите. Сколько раз Вам повторять, что код чаще читается, чем пишется.
Опишите, пожалуйста, какое поведение вы ожидаете от класса Hello и какое от класса Pack. Меня честно говоря удивляет наличие переменных и методов с именем money в классе с именем Hello.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 18:58     Ошибка в коде при использовании класов #7
fasked, Константными геттеры забыл сделать.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.08.2010, 18:59     Ошибка в коде при использовании класов #8
Цитата Сообщение от Lavroff Посмотреть сообщение
Константными геттеры забыл сделать.
Я ничего не менял в коде кроме стиля форматирования. Если бы я начал, что-то менять здесь, то первое мое действие было бы "стереть все".
Алена5
2 / 2 / 0
Регистрация: 17.05.2010
Сообщений: 68
31.08.2010, 19:15  [ТС]     Ошибка в коде при использовании класов #9
Цитата Сообщение от fasked Посмотреть сообщение
Алена5
Следите за тем, что пишите. Сколько раз Вам повторять, что код чаще читается, чем пишется.
Опишите, пожалуйста, какое поведение вы ожидаете от класса Hello и какое от класса Pack. Меня честно говоря удивляет наличие переменных и методов с именем money в классе с именем Hello.
На обсуждение я выставила только часть программы! Вся она занимаэт около 15 листов текста и всю ее просматривать не надо. Я показала только маленький не работающий кусочек, а в самой програме клас Hello написан не случайно и имеет соответсвующие ему методы.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 19:23     Ошибка в коде при использовании класов #10
Алена5, Сколько-сколько? С каких пор программы измеряются в "листах"???
Ну сделайте хотя бы геттеры константными. Ну пожалуйста.
Например вместо:

C++
1
int getMoney()
C++
1
int getMoney() const
И так все методы которые тупо возвращают значение. + Не пишите void main(). Прошу вас пишите int main() и в main по желанию return 0;
Rockedit
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1752 / 558 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
31.08.2010, 19:28     Ошибка в коде при использовании класов #11
Извините, что не по теме, но зачем сразу так критиковать? Вопрос был не раскритикуйте мой листинг, а подскажите почему сумма 15, а не 40. Вместо критики лучше предложите конструктивные предложения.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 19:30     Ошибка в коде при использовании класов #12
Rockedit, Как минимум листинг должен быть хотя бы чуть-чуть корректным... В данном случае я не предлагаю переделывать все (хотя это оптимально), а предлагаю только сделать методы константными и следовать стандарту с возвращаемым значение функции main.

Кстати. А в pack вы хотите установить первый элемент или же второй? Если первый тогда
C++
1
 money_prize[0];
все же. Если второй тогда верно.

А так же если я что-то понимаю, то лучше все-таки не использовать магические числа, а использовать константы для размера массива.
И... я бы заполнял все элементы массива нулями. То есть в цикле.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.08.2010, 21:29     Ошибка в коде при использовании класов #13
а что инкапсуляцию уже отменили?)
Значения полей объекта hy не имеют никаго отношения к значениям полей объекта money, как один из вариантов - передавать параметром объект hy, методу Get_a_prize класса Pack;
C++
1
2
3
4
5
6
void Pack::Get_a_prize(Hello& hy)
{
       int prise = money_prise[1] = 15;
       hy.Hello_user();
       hy.Money(prise);
}
P.S. форматирование кода ужасное
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2010, 16:29     Ошибка в коде при использовании класов
Еще ссылки по теме:

C++ Ошибка при использовании %
C++ Ошибка при использовании reverse_iterator
C++ Ошибка при использовании strcpy

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

Или воспользуйтесь поиском по форуму:
Студент 2010
Сообщений: n/a
02.09.2010, 16:29     Ошибка в коде при использовании класов #14
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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
using namespace std;
class Money
{
    int money, money_prize;;
public:
    Money()
    {
        money=0;
        money_prize=0;
    }
    void Initial( int m)
    {
        money=m;
    }
    int getMoney()
    {
        return money;
    }
    int getMoney_prize()
    {
        return money_prize;
    }
 
    void My_first_money()
    {
        money=25;
        cout<<"\n\n\t\t\t\tДобро пожаловать в игру. \n\tЗа регистрацию в системе на ваш баланс была положена сумма в 25$\n";
    }
    void Money_in_game(int money,int money_prize)
    {
 
        money=money+money_prize;
        cout<<"\n\t\t\t\tНа вашем счету "<<money<<"$\n";
    }
};
class Hello
{
    FILE *file;
    char* file_name;
public:
    int *money_case;
    void Hello_user()
    {
        //----------приветствие------------
        file_name="C:\\Pocer\\picture.txt";
        int NotUsed=system("color 17");
        char load_string[50]=" " ;
        file = fopen( file_name, "r" );
        if( file != 0 )
        {
            while(!feof(file))
            {
                fgets( load_string, 50 , file ); 
                cout  << load_string;
            }
        }
        else
        {
            cout << "File not found" << endl;
        }
        cout<<"\n\n\n";
        fclose(file);
        //----------считывание данных о пользователе-------
        ifstream file2("C:\\Pocer\\player.txt");
        char name[15];
        int money;
        char name_controll[15];
        int chek=0;
        int i=0;
        cout<<"\t \t\t      Введите имя пользователя\n\n\t\t\t\t\t";
        cin>>name_controll;
        system("cls");
        while(true)
        {
            file2>>name>>money;
            i++;
            if (!file2.eof())
            {
                if (!strcmp(name_controll,name))
                {
                    chek++;
                    break;
                }
            }
 
            else
                break;
        }
        fclose(file);
        if(chek==0)
        {
            ofstream save("C:\\Pocer\\player.txt",ios::app);
            money=25;
            save<<name_controll<<" "<<money<<"\n";
            save.close();
            Money m;
            m.My_first_money();
        }
        else
        {
            cout<<"\n\n\t\t\t\tЗдраствуйте "<<name_controll<<"\n";
            Money m;
            money_case=&money;
            m.Money_in_game(*money_case,0);
 
        }
 
    }
};
 
 
class Prize
{
 
    int money_prise[8];
public:
    void Get_a_prize()
    {
 
        money_prise[1]=10;
        for (int i=7; i>=0;i--)
        {
            
                cout<<money_prise[1]<<"\n";
                Hello m;
                int  l=*m.money_case;
                Money my;
                my.Money_in_game(l,money_prise[i]);
        }
 
 
    }
};
 
void main()
{
    setlocale(LC_ALL,"rus");
    char chois;
    Hello hy;
    hy.Hello_user();
    Prize p;
    p.Get_a_prize();
}
Результатом программы должно быть 110, а выводит 10
Подозреваю что проблема в этой части кода
Код:


my.Money_in_game(l,money_prise[i]);

Подскажите, пожалуйста, как правильно это записать чтобы вывод был корректным.
Yandex
Объявления
02.09.2010, 16:29     Ошибка в коде при использовании класов
Ответ Создать тему
Опции темы

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