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

Как обычную переменную на время сделать константой? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.07.2013, 10:32     Как обычную переменную на время сделать константой? #1
Как обычную переменную на время сделать константой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
19.07.2013, 17:47     Как обычную переменную на время сделать константой? #61
Цитата Сообщение от IGPIGP Посмотреть сообщение
Там ей и лучше будет. Перенесите код, раз он понравился в функцию сеттер для этой переменной и будет работать.
Отлично! Так и сделаю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nikitko_Cent
128 / 98 / 8
Регистрация: 27.10.2011
Сообщений: 627
Завершенные тесты: 2
19.07.2013, 17:53     Как обычную переменную на время сделать константой? #62
Цитата Сообщение от kotgav Посмотреть сообщение
Не класса, а программы. Подразумеваю переменную, которая определена и инициализирована вне функций, в верхней части программы. Чтобы в нее можно было поймать начальное значение переменной и использовать его как постоянную величину.
А при использовании класса она просится в класс. Но тогда будет ли она обладать такой возможностью?
Вот это мне пока непонятно.

Если это не получится, то есть варианты от IGPIGP с двумя функциями и без глобальной переменной.
Т.е. тебе нужна переменная в классе, в которую нужно по ходу программы занести значение, и затем обращаться к этой переменной для извлечения этого значения? Тогда переменная в классе вполне подойдет. Если ты собираешься реализовывать класс таймера, то советую эту переменную сделать private (ибо весь код таймера будет внутри класса, и обращения к этой переменной извне не должно происходить). Если ты уверен, что тебе нужно лишь единожды занести значение в переменную , а затем только извлекать это значение, то лучше использовать константу (так же внутри класса, разумеется)
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
19.07.2013, 18:00     Как обычную переменную на время сделать константой? #63
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
Т.е. тебе нужна переменная в классе, в которую нужно по ходу программы занести значение, и затем обращаться к этой переменной для извлечения этого значения? Тогда переменная в классе вполне подойдет. Если ты собираешься реализовывать класс таймера, то советую эту переменную сделать private (ибо весь код таймера будет внутри класса, и обращения к этой переменной извне не должно происходить). Если ты уверен, что тебе нужно лишь единожды занести значение в переменную , а затем только извлекать это значение, то лучше использовать константу (так же внутри класса, разумеется)
Да, нужно в каждом экземпляре класса обратиться к переменной единожды и занести в нее начальное значение из другой переменной. И это начальное значение не изменять ни при каких изменениях значений этой другой переменной.
С константой были примеры, я это вариант помню. Посмотрю, как в классе она работает.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
19.07.2013, 18:42     Как обычную переменную на время сделать константой? #64
Поленился прочитать тему целиком, может кому поможет, если вариант с классами, то если переменная одна, можно сделать к ней флажок, типа bool например, и гетер с сетером, инициализировать при первом заходе в сетер, поднять флажок и больше не изменится.
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
20.07.2013, 15:26     Как обычную переменную на время сделать константой? #65
Цитата Сообщение от Nixy Посмотреть сообщение
Поленился прочитать тему целиком, может кому поможет, если вариант с классами, то если переменная одна, можно сделать к ней флажок, типа bool например, и гетер с сетером, инициализировать при первом заходе в сетер, поднять флажок и больше не изменится.
Спасибо, тоже пригодится!

Добавлено через 18 часов 22 минуты
=========================================================================
Почему-то новое мое сообщение добавляется к прежнему, а не создается как новое.
Поэтому получается очень большое сообщение.
=========================================================================

Сделал пример "замораживания" переменной с классом. Как мне и подсказывали, работает и без глобальной переменной. Понравилось.
Итак, создал заголовочный файл для описания класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once     // Исключаем повторное подключение заголовочных файлов
 
#include <iostream>
using namespace std;
 
class Measurer         // класс Измеритель
{
public:
    int setdata(int d);   // метод (функция) класса. Аргумент d - входная переменная с текущим изменяемым значением   
 
private:
    int a;             // глобальная вспомогательная переменная
    int b;             // переменная с неизменяемым начальным значением переменной d
    int c;             // текущая разность
 
protected:
 
};
Создал файл исходных кодов с логикой класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#include "Sht_Classes.h"
 
 
int Measurer::setdata(int d)         // метод класса 
{
    if (a < 0)
    {
        a = d;    // замораживаем начальное значение в глобальной переменной
    }
    b = a;        // присваиваем замороженной значение временной константе
    c = d - b;    // текущая разность
    cout << "Временная константа a= " << a << " Текущая разность c= " << c << endl;
    return c;
}
В основном файле исходных кодов с главной функцией создал объект моего класса:
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 "stdafx.h"
#include <iostream>
#include "Sht_Classes.h"
using namespace std;
 
 
// Главная (вызывающая) функция
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    Measurer PrMeter;       // определяем объект PrMeter класса Measurer
    int i;                  // входная переменная с текущим значением
 
    // устанавливаем значения объекта с помощью метода класса Measurer   
    for(i=1; i<5; ++i)
    {
        PrMeter.setdata(i);
    
    // выводим на экран текущие значения переменной i    
       cout << "Входная переменная i= " << i << "\n" << endl;
       system ("pause");
    }
 
    return 0;
}
Остались вопросы, подскажите пожалуйста.
1. Среда требует возвращаемой переменной. Я поставил с - текущую разность. Но в примерах в книжках есть классы и без return и разобраться в том, когда нужен return, а когда нет я не смог.
2. Не понял также, как вывести в экземпляре класса (в моем объекте) переменную из класса? Конкретно, захотел вывести вместе с "i" также и текущую разность "c" вот в этой строчке экземпляра класса:
cout << "Входная переменная i= " << i << "\n" << endl;

Добавлено через 2 часа 12 минут
Дополнение по вопросам.
По пункту 2 разобрался - переменная с была защищена. Перенес ее в public и ее значение PrMeter.c прекрасно выводится из основного файла (с главной функцией).
Это вопрос закрыт.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
20.07.2013, 15:56     Как обычную переменную на время сделать константой? #66
Ну если нет необходимости возвращать сделайте метод void, а если не void то всегда нужно что-то вернуть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 15:57     Как обычную переменную на время сделать константой?
Еще ссылки по теме:

Как сделать, чтобы "*" принимали как обычную переменную? C++
Как сделать уже созданную переменную ссылкой C++
C++ Как сделать переменную строковой C++

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

Или воспользуйтесь поиском по форуму:
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
20.07.2013, 15:57     Как обычную переменную на время сделать константой? #67
Цитата Сообщение от Nixy Посмотреть сообщение
Ну если нет необходимости возвращать сделайте метод void, а если не void то всегда нужно что-то вернуть
О, точно! Забыл.
Спасибо!
Yandex
Объявления
20.07.2013, 15:57     Как обычную переменную на время сделать константой?
Ответ Создать тему
Опции темы

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