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

функция с инкрементом объекта. ++ - C++

Восстановить пароль Регистрация
 
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:04     функция с инкрементом объекта. ++ #1
Доброго времени суток.
Прошу помочь в реализации функций.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
static COORD Coordinate;
 
Coordinate.X = 0;
 
// создаем функцию для инкремента объекта COORD (думаю не верно)
void PointIncrement(COORD Point)
{
    ++Point.X;
    SetConsoleCursorPosition(hConsole,Point);
    cout << "Point";
}
 
void main()
{
    while(1)
    {
        PointIncrement(Coordinate); 
        Sleep(100);
    }
     
}
Каждые 0.1 сек "Point" должен передвигаться направо.
Но тут инкремент только на один шаг срабатывает и виснет.
Как правильно должна выглядеть функция?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2011, 14:04     функция с инкрементом объекта. ++
Посмотрите здесь:

Помогите чайнику с инкрементом... C++
Скобки не работают с постфиксным инкрементом C++
Как правильно вызывать функцию объекта из другой функции того же объекта? C++
C++ Требуется ли при удалении объекта посредством delete указывать тип объекта?
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
22.06.2011, 14:23     функция с инкрементом объекта. ++ #2
Переменная Point передаётся по значению, поэтому все изменения пропадают при выходе из функции.
попробуй по ссылке передать
C++
1
void PointIncrement(COORD &Point)
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:32  [ТС]     функция с инкрементом объекта. ++ #3
Большое спасибо, а можешь в теорий объяснить что к чему?
А то я хочу понять, почему с простыми типами изменения не проподают, а с объектами удаляются?
А можете тоже самое реализовать с помощью указателей? (у меня не совсем верно получается)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.06.2011, 14:35     функция с инкрементом объекта. ++ #4
vendeme, С простыми тоже пропадают.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
static COORD Coordinate;
 
Coordinate.X = 0;
 
// создаем функцию для инкремента объекта COORD (думаю не верно)
void PointIncrement(COORD* Point)
{
        ++Point->X;
        SetConsoleCursorPosition(hConsole,*Point);
        cout << "Point";
}
 
void main()
{
    while(1)
    {
        PointIncrement(&Coordinate); 
        Sleep(100);
    }
     
}
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:46  [ТС]     функция с инкрементом объекта. ++ #5
Хм, проверил, и в правду так.
Я конечно ссылки не очень изучал, но:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void test(int t)
{
    t++;
}
void main()
{
    int x = 1;
    while(1)
    {
        test(x);
        cout<<x;
        Sleep(50);
    }
}
while(1)
{
test(x);
}

почему x не возрастает? По идее же за блок не выходит.
Вроде функция должна просто увеличивать СТАРОЕ число.
..
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
22.06.2011, 14:50     функция с инкрементом объекта. ++ #6
При вызове функции test в неё передаётся значение переменной x, и дальше функция изменяет копию переменной x (с именем t) а не саму эту переменную. При выходе из функции копия разрушается, а значение переменной x так никогда и не изменится.
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:52  [ТС]     функция с инкрементом объекта. ++ #7
ааа, тоесть в test нужно return t добавить. Или же просто через &
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
22.06.2011, 14:53     функция с инкрементом объекта. ++ #8
если очень хочется, что бы переменная изменялась - передавай с использованием &
test ( &x ) {}
есессно функцию так же объявлять с &

Добавлено через 34 секунды
return не будет изменять переменную.
можно завести новую, которая будет принимать значения, возвращаемые функцией
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
22.06.2011, 14:54     функция с инкрементом объекта. ++ #9
Можно return, но тогда всё будет выглядеть по другому.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int test(int t)
{
        t++;
        return t;
}
void main()
{
        int x = 1;
        while(1)
        {
                x = test(x);
                cout<<x;
                Sleep(50);
        }
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
22.06.2011, 18:11     функция с инкрементом объекта. ++ #10
Судя по первому посту переменная COORD Coordinate - глобальная. Зачем вообще что-то куда-то передавать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD Coordinate={0};
 
void PointIncrement()
{
        if(++Coordinate.X==80){
             Coordinate.X=0;
             ++Coordinate.Y;
        }
        SetConsoleCursorPosition(hConsole,Coordinate);
        cout << "Point";
}
 
void main()
{
    while(1)
    {
        PointIncrement(); 
        Sleep(100);
    }
     
}
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 18:39  [ТС]     функция с инкрементом объекта. ++ #11
А если этих объектов у меня МНОГО?
Я создал эту функцию чтобы инкремировать объектЫ.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.06.2011, 22:21     функция с инкрементом объекта. ++ #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
vendeme, Товарищ, быдлокодер - это вы. Т.к. вы сами создали глобальную переменную. Вам просто указали как проще работать с глобальной переменной. Глобальные переменные сами по себе зло, особенно там где они не нужны. Запомните.
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
23.06.2011, 02:09  [ТС]     функция с инкрементом объекта. ++ #13
Я же для примера выложил в виде глобального.
silent_1991
23.06.2011, 02:30
  #14
 Комментарий модератора 
vendeme, титулы раздавать заканчивайте, а то будет вам "модератор в ярости".
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.06.2011, 10:00     функция с инкрементом объекта. ++ #15
vendeme, Человек, пишущий код для примера разве будет использовать то, что не использует в обычной жизни? В таком ключе я могу написать такой код для примера.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
    int o1 = 10;
    int ol = 5;
    int _ = 0;
what:
    _ += o1 + ol;
    if (_ < 500)
       goto what;
    std::cout << _ << '\n';
}
Ведь тоже код для примера... Правда мне его было противно писать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2011, 17:27     функция с инкрементом объекта. ++
Еще ссылки по теме:

C++ Функция вне класса для передачи функции объекта
Создание объекта в функции и возврат объекта из нее C++
C++ Виртуальная функция и возврат объекта класса

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

Или воспользуйтесь поиском по форуму:
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
23.06.2011, 17:27  [ТС]     функция с инкрементом объекта. ++ #16
ForEveR, Рекомендую тебе разобраться в себе. Конечно, ты это сейчас не воспримешь всерьёз, но через неделю ты это заметишь. (печень..)

Всем огромное спасибо, с проблемой разобрался. Форум отличный, буду обращаться.
Yandex
Объявления
23.06.2011, 17:27     функция с инкрементом объекта. ++
Ответ Создать тему
Опции темы

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