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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Насколько нужно выучить C++, перед тем как переходить на C#? http://www.cyberforum.ru/cpp-beginners/thread922839.html
Я изучаю программирование (язык С++) дома, в институте наверно тоже скоро будем его изучать. Я знаю, что C++ очень полезно знать и владение им на хорошем уровне всегда приветствуется. Но меня очень волнует, что сейчас везде стали делать акцент на C# и Java и я боюсь, что сейчас, начав изучать C++, я теряю время, которое мог бы потратить на изучение C#. Например, некоторые мои одногруппники сейчас...
C++ Стартовый код компилятора VS Программа написанная на C++ под отладкой показывает, много кода, который явно не включался в исходный код в отличие от программы написанной на ассемблере. В веб толком ничего не нашел. Рихтер вскользь упомянул про него, но толком ничего не ясно. Что почитать по данной теме? http://www.cyberforum.ru/cpp-beginners/thread922837.html
C++ Класс Car. Наследование
1) У нас есть class Car --> св-ва maxspeed, currentspeed. Методы Getmaxs(), Getcurrs() которые соответственно возвр. maxspeed и currentspeed. Также есть метод Setcurrs()(этот метод нужен для защиты от дурака) + еще есть полностью виртуальный метод virtual void Info()=0; 2) от Car наследуется Lorry (камаз) и у него переопределяется метод void Info(); 3) от Car наследуется Bus (автобус) и...
Авторизация но на сайте javascripts C++
Ув.Форумчане, хотел спросить, вот я хочу создать авторизацию на сайт. Допустим что-бы авторизоваться на сайт vk.com, все давно легко Я через сниффер увидел http://vk.com/login.php?m=1&email=логин&pass=пароль А вот пытаюсь написать программу чтоб авторизоваться тут: http://turboliker.ru/, и у меня не получается, т.к до входа в панель, там иду скрипты, и путь не виден. Так-же просматривая...
C++ непонятно зачем нужный map.value_comp http://www.cyberforum.ru/cpp-beginners/thread922816.html
непонимание здесь в том, что зачем мы пишем std::pair<char,int> highest = {'d',3006} ; если все равно всё сравнение идёт по "char" а, не по int. Для этого есть же key_comp которому при сравнении нужен только char #include <iostream> #include <map> typedef std::map<char,int> chint; int main () { chint mymap; mymap=1001; mymap=2002; mymap=3003; mymap=1101; mymap=2022; mymap=4545; ...
C++ String, конкатенация и "необъявленные" строки Доброго времени суток! Во время написания простого примера (изучаю язык) наткнулся на проблему с конкатенацией строк: #include <iostream> #include <string.h> using namespace std; int main() { string text = "text"; подробнее

Показать сообщение отдельно
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
17.07.2013, 11:39     Как обычную переменную на время сделать константой?
Цитата Сообщение от IGPIGP Посмотреть сообщение
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
//вот так тоже забавно:
#include <iostream>
 using namespace std;
//если 0 по умолчанию не устраивает
 int foo2(int ai){
int first_inisializer = -1;//не обязательно -1, можно всё что угодно, NAN например, лишь бы a 
//не могла принимать это значение естественным путём))
static int prevA;//инициализируется нулём до первого вызова, но тепрь это неважно
static int count_of_callings;//то же с нуля 
if( count_of_callings==0 ) prevA = first_inisializer;
if( prevA ==  first_inisializer ) prevA = ai;
const int a = prevA;// :)
//далее работаем с переменной a 
 
 
 
if(count_of_callings<100)//защита от переполнения
count_of_callings++;//делаем невозможной переустановку в first_inisializer
else count_of_callings = 1;
return a;
 }
 
int main()
{  
for(int i=6; i<9; ++i) cout<<foo2(i)<<" ";//6 6 6 то есть не меняется значение в функции
    cout<<endl;  
    system("pause");
    return 0;
}
Разобрался и со вторым примером. Немного добавил комментариев и кое-где изменил форму написания.
Работает прекрасно для консольного приложения!

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
// Вспомогательная (вызываемая) функция
int foo2(int ai)
{
    int first_inisializer = -1;           // вспомогательная переменная, инициализируем любым значением
    static int prevA;                     // первая статическая переменная, инициализируется по умолчанию нулем
    static int count_of_callings;         // вторая статическая переменная, инициализируется по умолчанию нулем
    
    if( count_of_callings == 0 )          // проверяем состояние, если 0 - значит первый вызов   
        prevA = first_inisializer;        // при первом вызове даем статической переменной значение вспомогательной переменной, т.е. -1 
    if( prevA == first_inisializer)       // проверяем равенство. При первом вызове переменные равны -1   
        prevA = ai;                       // при первом вызове присваиваем prevA полученной значение из вызывающей функции, т.е. начальное значение
    const int a = prevA;                  // замораживаем а, присваивая ей начальное значение
 
   if(count_of_callings<100)   //защита от переполнения
       count_of_callings++;    //делаем невозможной переустановку в first_inisializer
   else
       count_of_callings = 1;
 
   return a;     // возвращаем начальное значение
 }
 
 
// Главная (вызывающая) функция
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    int i = 0;
    int b = 0;
    int c = 0;
 
    for(i=1; i<5; ++i)
    {
        b = foo2(i);     // присваиваем "замороженное" переменной b, которая выполняет роль временной константы в вызывающей функции
        c = i-b;         // текущая разность
 
        cout << "i= "<< i << " а= " << b << " c= " << c << "\n" << endl;;    // вывод текущего i и "замороженного foo1(i)" значений 
        system("pause");
    }
 
    system("pause");
    return 0;
}
Сделаю свою библиотеку, покажу прием "замораживания" начального значения времени в библиотеке.

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Второй вопрошающий, спрашивает вообще не об этом. Как выяснилось позже. Особенно в свете:

И тоже ничего. Почему бы не поговорить?
Сделал пример "замораживания" начального значения переменной в одной функции с использованием глобальной вспомогательной переменной.
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
Example_StaticVar.cpp: определяет точку входа для консольного приложения.
// Вариант создания временной константы с "ручной" инициализацией глобальной переменной  
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int a = -1;         // глобальная вспомогательная переменная
 
 
// Главная (вызывающая) функция
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    int i = 0;
    int b = 0;
    int c = 0;
 
    for(i=1; i<5; ++i)
    {
        if (a < 0)
        {
            a = i;      // "замораживаем" начальное значение переменной i в глобальной переменной а
        }
 
        b = a;          // присваиваем "замороженное" переменной b, которая выполняет роль временной константы в вызывающей функции
        c = i-b;         // текущая разность
        cout << "i= "<< i << " а= " << b << " c= " << c << "\n" << endl;;    // вывод текущего i и "замороженного foo1(i)" значений 
        system("pause");
    }
    system("pause");
    return 0;
}
 
Текущее время: 01:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru