Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
valeriy_zf
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
1

Почему переменные одного и того же класса меняют свои значения одновременно

19.02.2010, 02:31. Просмотров 744. Ответов 4
Метки нет (Все метки)

Действительно, столкнулся с таким фактом.

Объявляю свой класс:
C++
1
2
3
4
5
ref class My_Class
{
public:
  static array<int>^ mas = gcnew array<int>(10);
};
На пустую форму тащю кнопку и для события OnClick пишу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
        My_Class A; // ------ объявляю переменные своего класса
        My_Class B;
 
        A.mas[1] = 11;  //  ------ присваиваю значения только для "А"
        A.mas[2] = 22;
 
        // ---------------  вывожу значения на форму
        listBox1->Items->Add("A.mas[1]= " + A.mas[1].ToString());
        listBox1->Items->Add("A.mas[2]= " + A.mas[2].ToString());
 
        listBox1->Items->Add("B.mas[1]= " + B.mas[1].ToString());
        listBox1->Items->Add("B.mas[2]= " + B.mas[2].ToString());
После запуска программы и нажатия кнопки с удивлением наблюдаю, как свои значения поменял не только массив "А", но и "В".
Т.е в listBox1 выводится текст:

A.mas[1]= 11
A.mas[2]= 22
В.mas[1]= 11
В.mas[2]= 22

А ведь переменную "В" я даже не трогал!
Внизу исходничек...
0
Вложения
Тип файла: zip Class_Array.zip (3.07 Мб, 10 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2010, 02:31
Ответы с готовыми решениями:

Где в приведенном коде переменные хранят свои значения
Друзья, помогите разобраться с объектами. Например, где, созданные в этом листинге 3 объекта - а, b...

Как передать входящее значение одного метода класса на возврат в другой метод того же класса?
Я самый новейший новичок. Помогите.Как передать входящее значение (количество еды) метода feed...

Два диска меняют свои имена в Ubuntu
Здравствуйте, Это скорее не проблема пока что, а моё любопытство. У меня 2 диска — внутренний и...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и...

Меняют ли элементы в vector свои адреса при вызове метода push_back?
Допустим я определил вектор и указатель на один из его элементов: vector&lt; int &gt; v( 10 ); int* p =...

4
HIMen
4277 / 1445 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
19.02.2010, 02:34 2
Потому что он у тебя статический, т.е. один и тот же для все экземпляров класса.
Убери слово static
1
valeriy_zf
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
19.02.2010, 02:44  [ТС] 3
Если я уберу слово static, то компилятор выдает ошибку:
error C3845: My_Class::mas: только статические данные-члены можно инициализировать внутри класс ссылки или типа, передаваемого по значению

Как же быть в этом случае, если мне нужен для каждого экземпляра класса свой массив?
Спасибо.
0
HIMen
4277 / 1445 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
19.02.2010, 03:05 4
C++
1
2
3
4
5
6
7
8
9
ref class My_Class
{
public:
    array<int>^ mas;
    My_Class()
    {
      mas = gcnew array<int>(10);
    }
};
инициализировать члены надо в конструкторе
1
valeriy_zf
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
19.02.2010, 22:22  [ТС] 5
Спасибо,
Появились новые вопросы, но это уже другая тема:
Класс в классе: В экземпляре объекта не задана ссылка на объект
0
19.02.2010, 22:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2010, 22:22

Дана программа из 7 строк. Почему y,z не увеличивают свои значения на 1?
#include&lt;stdio.h&gt; int main(){ int x = 1, y = 1, z = 1, u; u = ++x || ++y &amp;&amp; ++z; printf(&quot;x=%d,...

Как передать переменные из одного класса в другой?
Привет всем! Не могу разобраться с вопросом: я создал программу в WinForms, суть ее в том, что есть...

Передача значения переменной из метода одного класса в метод другого класса
Добрый вечер! Есть основная форма Form1 в которой есть метод private void button1_Click(object...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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