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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

Почему при компилировании программы со вторым экземпляром класса изменяются значения первого? - C++

02.04.2014, 16:39. Просмотров 219. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Вопрос: почему при компилировании программы со вторым экземпляром класса изменяются значения первого?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace SALES {
        const int QUARTERS = 4;
        class Sales {
        private:
                double sales[QUARTERS];
                double average;
                double max;
                double min;
        public:
                Sales() {
                        average = max = min = 0;
                }
                Sales(const double*, const int);
                ~Sales() {
                }
                void show() const;
        };
}

Кликните здесь для просмотра всего текста
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
#include "sales.hxx"
#include <iostream>
 
namespace SALES {
    Sales::Sales(const double ar[], const int n) {
        int i = 0;
        for (; i < n; i++)
            sales[i] = ar[i];
        i = 0;
        double curmax = .0, absmax = .0, curmin = .0, absmin = .0;
        while (sales[i+1]) {
            if (sales[i] > sales[i+1]) {
                curmax = sales[i];
                if (curmax > absmax)
                    absmax = sales[i];
            }
            i++;
        }
        i = 0;
        while (sales[i+1]) {
            if (sales[i] < sales[i+1]) {
                curmin = sales[i];
                if (curmin < absmin || absmin == 0)
                    absmin = sales[i];
            }
            i++;
        }
        i = 0;
        double val = .0;
        while (sales[i]) {
            val += sales[i];
            i++;
        }
        val = val / i;
        average = val;
        max = absmax;
        min = absmin;
    }
 
    void Sales::show() const {
        std::cout << "avg: " << average << std::endl;
        std::cout << "max: " << max << std::endl;
        std::cout << "min: " << min << std::endl;
    }
}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "sales.hxx"
 
namespace {
    const int SIZE = 4;
    double array[SIZE] = {2223.7, 2893.89, 2090.1, 2149.7};
}
 
int main()
{
    SALES::Sales X(array, SIZE);
    X.show();
    //SALES::Sales Y;
    //Y.show();
    return 0;
}


Речь идет об Y.

Добавлено через 2 минуты
С закомментированными последними строчками результат:
avg: 1559.56
max: 2893.89
min: 2090.1


Без комментирования:
avg: 668.385
max: 2893.89
min: 9.88131e-324
avg: 0
max: 0
min: 0
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2014, 16:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему при компилировании программы со вторым экземпляром класса изменяются значения первого? (C++):

При компилировании компилятор вылетает,нет ли ошибок, или почему он так? - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace std; int main; void init (int matrix, int size); ...

проблема - при выводе переменных, их значения изменяются - C++
Проблема в элементарном коде, после присваивания переменной `result1` значения `n+++m--`, значения `n` и `m`, тоже изменяются, что за...

Разница между объектом и экземпляром класса - C++
Можете объяснить какая между этими понятиями разница?

Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация? - C++
#include &lt;iostream&gt; template &lt;typename T&gt; class first { public: T value; first (T n) : value(n) {} virtual...

При удалении записей значения полей автоматически увеличивающееся на 1 (+Autoincrement) не изменяются в оставшихся полей не изменяются - Delphi БД
При удалении записей значения полей автоматически увеличивающееся на 1 (+Autoincrement) не изменяются в оставшихся полей не изменяются

Ошибка при компилировании программы - Visual C++
Всем привет Вот такая ситуация. При компилировании программы происходит ошибка: Подскажите, в чем проблема. Спасибо

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
02.04.2014, 16:56 #2
Если в циклах поправить:
C++
1
while(sales[i])
на
C++
1
while(i!=n)
а также,
i=1 и сранивать элементы sales[i] < > sales[i-1] вместо sales[i] < > sales[i+1] (чтоб не выходить за рамки массива), то должно получится. По крайней мере у меня сработало.
Кроме того неужели вас не насторожило, что среднее значение не находится в пределах минимума и максимума?
1
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
03.04.2014, 22:56  [ТС] #3
Wlk, спасибо, помогло!
Интересно, а почему нельзя было использовать в условиях циклов sales[i]?

Не по теме:

p.s. конечно, насторожило.

0
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
03.04.2014, 23:51 #4
Потому что видимо вы вышли за рамки заполненного части вашего массива, или вообще за его рамки (н+1), где хранилась undefined data. У меня например результат абсолютно не похож на ваш.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 23:51
Привет! Вот еще темы с ответами:

Ошибки при компилировании программы - Pascal ABC
Program pr1; Var masA:real; Uses crt; For i:1 to 10 do; Begin Writeln('Vedi masA',i,']='), readln(masA); end; Vedi...

Ошибка при компилировании программы - C#
Помогите исправить ошибку ....+ у меня кнопка &quot;открыть&quot; работает а &quot;сохранить&quot; и &quot;выход&quot; нет!!!!! при компилировании мне вылазит...

Ошибка при компилировании программы - C++ COM
Всем привет Вот такая ситуация. При компилировании программы происходит ошибка: Подскажите, в чем проблема. Спасибо

Ошибка при компилировании программы - Visual C++ БД
Всем привет Вот такая ситуация. При компилировании программы происходит ошибка: Подскажите, в чем проблема. Спасибо


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

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

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