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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
#1

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

22.06.2011, 14:04. Просмотров 1044. Ответов 15
Метки нет (Все метки)

Доброго времени суток.
Прошу помочь в реализации функций.

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++ Виртуальная функция и возврат объекта класса
C++ Функция вне класса для передачи функции объекта
C++ Требуется ли при удалении объекта посредством delete указывать тип объекта?
Как правильно вызывать функцию объекта из другой функции того же объекта? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
22.06.2011, 14:23     функция с инкрементом объекта. ++ #2
Переменная Point передаётся по значению, поэтому все изменения пропадают при выходе из функции.
попробуй по ссылке передать
C++
1
void PointIncrement(COORD &Point)
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:32  [ТС]     функция с инкрементом объекта. ++ #3
Большое спасибо, а можешь в теорий объяснить что к чему?
А то я хочу понять, почему с простыми типами изменения не проподают, а с объектами удаляются?
А можете тоже самое реализовать с помощью указателей? (у меня не совсем верно получается)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
-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
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
22.06.2011, 14:50     функция с инкрементом объекта. ++ #6
При вызове функции test в неё передаётся значение переменной x, и дальше функция изменяет копию переменной x (с именем t) а не саму эту переменную. При выходе из функции копия разрушается, а значение переменной x так никогда и не изменится.
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:52  [ТС]     функция с инкрементом объекта. ++ #7
ааа, тоесть в test нужно return t добавить. Или же просто через &
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
22.06.2011, 14:53     функция с инкрементом объекта. ++ #8
если очень хочется, что бы переменная изменялась - передавай с использованием &
test ( &x ) {}
есессно функцию так же объявлять с &

Добавлено через 34 секунды
return не будет изменять переменную.
можно завести новую, которая будет принимать значения, возвращаемые функцией
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
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
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 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
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 18:39  [ТС]     функция с инкрементом объекта. ++ #11
А если этих объектов у меня МНОГО?
Я создал эту функцию чтобы инкремировать объектЫ.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.06.2011, 22:21     функция с инкрементом объекта. ++ #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
vendeme, Товарищ, быдлокодер - это вы. Т.к. вы сами создали глобальную переменную. Вам просто указали как проще работать с глобальной переменной. Глобальные переменные сами по себе зло, особенно там где они не нужны. Запомните.
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
23.06.2011, 02:09  [ТС]     функция с инкрементом объекта. ++ #13
Я же для примера выложил в виде глобального.
silent_1991
23.06.2011, 02:30
  #14
 Комментарий модератора 
vendeme, титулы раздавать заканчивайте, а то будет вам "модератор в ярости".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2011, 10:00     функция с инкрементом объекта. ++
Еще ссылки по теме:
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования C++
Создание объекта в функции и возврат объекта из нее C++
Вывод данных вложенного объекта из другого объекта C++
C++ Передача объекта методу другого объекта другого класса
Функция sqrt: существует более одного экземпляра. Функция перегруженная C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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';
}
Ведь тоже код для примера... Правда мне его было противно писать.
Yandex
Объявления
23.06.2011, 10:00     функция с инкрементом объекта. ++
Ответ Создать тему
Опции темы

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