1 / 1 / 1
Регистрация: 04.08.2015
Сообщений: 13
|
||||||
1 | ||||||
Почему метод класса затирает статическое поле30.10.2015, 13:59. Показов 920. Ответов 7
Метки нет (Все метки)
Добрый день Я учу самостоятельна с++. Сейчас разбираю тему классы. Вот у меня возник вопрос по коду:
Почему третий метод funk(); затирает статическую переменную, если при вызове void maxim::daiwud1() стоит условие b=b+2; ? То есть этот метод ничем не отлич. от b.daiwud1(); , а результат разный. Сам код ничего не делает , я просто разбираюсь в логике. Помогите понять что не так Спасибо.
0
|
30.10.2015, 13:59 | |
Ответы с готовыми решениями:
7
Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! Статическое поле класса, имеющее тип того же класса Статическое поле,количество экземпляров класса Статическое поле класса: подсчет количества созданных объектов |
2333 / 1820 / 753
Регистрация: 27.07.2012
Сообщений: 5,372
|
|
30.10.2015, 14:34 | 2 |
Потому что там создаётся объект класса maxim, в конструкторе которого b устанавливается в 0.
0
|
1 / 1 / 1
Регистрация: 04.08.2015
Сообщений: 13
|
|
30.10.2015, 16:23 [ТС] | 3 |
Т.е. если вызов класса за пределами функции main происходит , то статическая переменная затирается и не сохраняет своего значения?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
30.10.2015, 19:17 | 4 |
Статическая переменная одна, а объектов много. Каждый вызов конструктора для нового объекта перепишет ее значение. Где находится объект роли не играет.
Наверняка тебе что-то такое нужно:
0
|
1 / 1 / 1
Регистрация: 04.08.2015
Сообщений: 13
|
|
02.11.2015, 14:13 [ТС] | 5 |
Подскажите пожалуйста, почему тогда b.daiwud1(); при вызове отображает статическую переменную как 2.
Ведь я в конструкторе поставил такое условие b=0; Т.е. у меня перем. a=4; перезаписалась с первого вызова обратно на 4, а статическая перем. осталась - 2. Потом при вызове третьего метода статическая переменная перезаписалась на 0 обратно. Так вот, в чем отличие вызова метода b.daiwud1(); и с.daiwud1(); ? Добавлено через 8 минут DrOffset Но Вам отдельное спасибо за разъяснение, как можно привязать одну переменную ко всем методам Я честно говоря не понимал этого. Теперь буду знать.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
02.11.2015, 19:25 | 6 |
1) Сначала вызывались два конструктора для объектов a и b. (строка 48)
2) В каждом из этих конструкторов было присвоено переменной maxim::b - ноль. Сначала конструктор "а" присвоил переменной maxim::b ноль, потом конструктор b присвоил переменой maxim::b ноль. Напоминаю, переменная эта одна и та же. (строка 20) Идем далее. 3) Вызываем функцию maxim::daiwud() у объекта a. Увеличение maxim::b на 2. Т.е. b = b + 2; (b = 0 + 2) (строка 31). Затем вывод этого значения на экран (2) (строка 34). 4) Вызываем функцию maxim::daiwud1() у объекта b. В ней сначала выводится на экран значение переменной maxim::b, т.е. выводится 2 (строка 40). Затем выполняется увеличение переменной (строка 41) еще раз на 2, т.е. b = b + 2; (b = 2 + 2). В maxim::b число 4. 5) Потом вызывается функция funk();, которая создает локальный объект с, конструктор этого объекта выполняет присваивание нуля переменной maxim::b, затирает ее. Функция c.daiwud1(); вызванная позже, сначала выводит ноль из переменой maxim::b, затем выполняет увеличение на 2, т.е. в переменной maxim::b опять 2. Отличие в том, что эти функции по разному работают с maxim::b. Одна функция сначала увеличивает значение, потом его печатает, а другая - наоборот, сначала печатает, потом увеличивает.
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|||||||||||
02.11.2015, 20:07 | 7 | ||||||||||
мне кажется ТС не понимает смысла static. итак записи вида
к статической переменной(в нашем случае в privat секции) есть доступ у класса a(и пр friend, derived privat итп) но она тоже одна
0
|
1 / 1 / 1
Регистрация: 04.08.2015
Сообщений: 13
|
|
03.11.2015, 13:01 [ТС] | 8 |
Спасибо. Теперь я понял смысл.
Локальный объект с не продолжает прибавлять данные в static, а перезатирает на то, что указано в конструкторе при вызове из другой функции. Нужно мне еще раз перечитать про static более подробнее.
0
|
03.11.2015, 13:01 | |
03.11.2015, 13:01 | |
Помогаю со студенческими работами здесь
8
Статическое поле абстрактного класса в как наследуемое поле и преведение его типа Статическое поле класса Статическое поле класса Статическое поле из производного класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |