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

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

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

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

22.06.2011, 14:04. Просмотров 1071. Ответов 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" должен передвигаться направо.
Но тут инкремент только на один шаг срабатывает и виснет.
Как правильно должна выглядеть функция?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2011, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функция с инкрементом объекта. ++ (C++):

Помогите чайнику с инкрементом... - C++
Здравствуйте! Понимаю, конечно, что вопрос наверное дурацкий... но я только начал знакомство с С++, а этот вопрос не дает покоя... int...

Скобки не работают с постфиксным инкрементом - C++
Почему скобки не работают с постфиксным инкрементом ? Программа должна вывести 1, а выводит 0. Без скобок приоритет постфиксного инкремента...

Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах - C++
Можете объяснить разницу между i++ и ++i на просто примере с цифрами?

Виртуальная функция и возврат объекта класса - C++
Доброго времени суток! Столкнулся с проблемой. Есть переопределенный оператор умножения в родительском классе. virtual CComplex...

Функция вне класса для передачи функции объекта - C++
Добрый вечер, уважаемые форумчане. Столкнулся с таким пунктом в условии задания: Создать функцию вне класса для передачи функции...

Какая функция объекта cin позволяет вставить символ в поток ввода? - C++
Какая функция обьекта cin позволяет вставить символ в поток ввода?Пример,если можно.

15
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
22.06.2011, 14:23 #2
Переменная Point передаётся по значению, поэтому все изменения пропадают при выходе из функции.
попробуй по ссылке передать
C++
1
void PointIncrement(COORD &Point)
1
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:32  [ТС] #3
Большое спасибо, а можешь в теорий объяснить что к чему?
А то я хочу понять, почему с простыми типами изменения не проподают, а с объектами удаляются?
А можете тоже самое реализовать с помощью указателей? (у меня не совсем верно получается)
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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);
    }
     
}
1
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 не возрастает? По идее же за блок не выходит.
Вроде функция должна просто увеличивать СТАРОЕ число.
..
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
22.06.2011, 14:50 #6
При вызове функции test в неё передаётся значение переменной x, и дальше функция изменяет копию переменной x (с именем t) а не саму эту переменную. При выходе из функции копия разрушается, а значение переменной x так никогда и не изменится.
0
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:52  [ТС] #7
ааа, тоесть в test нужно return t добавить. Или же просто через &
0
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
22.06.2011, 14:53 #8
если очень хочется, что бы переменная изменялась - передавай с использованием &
test ( &x ) {}
есессно функцию так же объявлять с &

Добавлено через 34 секунды
return не будет изменять переменную.
можно завести новую, которая будет принимать значения, возвращаемые функцией
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
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);
        }
}
0
Kastaneda
Форумчанин
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,317
Записей в блоге: 2
Завершенные тесты: 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);
    }
     
}
0
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 18:39  [ТС] #11
А если этих объектов у меня МНОГО?
Я создал эту функцию чтобы инкремировать объектЫ.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
22.06.2011, 22:21 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
vendeme, Товарищ, быдлокодер - это вы. Т.к. вы сами создали глобальную переменную. Вам просто указали как проще работать с глобальной переменной. Глобальные переменные сами по себе зло, особенно там где они не нужны. Запомните.
3
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
23.06.2011, 02:09  [ТС] #13
Я же для примера выложил в виде глобального.
0
silent_1991
23.06.2011, 02:30
  #14
 Комментарий модератора 
vendeme, титулы раздавать заканчивайте, а то будет вам "модератор в ярости".
3
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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';
}
Ведь тоже код для примера... Правда мне его было противно писать.
0
23.06.2011, 10:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2011, 10:00
Привет! Вот еще темы с ответами:

Требуется ли при удалении объекта посредством delete указывать тип объекта? - C++
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс TMyClass; создаются объектыp1=new...

Как правильно вызывать функцию объекта из другой функции того же объекта? - C++
Доброго дня и ночи, уважаемые программисты! Существует некоторая проблема, на которую я наткнулся, решая задачу по программированию из...

При возврате объекта из функции пишет, что для объекта не определен констуктор копирования - C++
Пишу шаблонный класс матриц. Делаю, значит, переопределение оператора + для двух матриц одного типа. Но компилятор ругается на эту функцию ...

Создание объекта в функции и возврат объекта из нее - C++
Не могу разобраться с ссылками. Возможно ли вернуть из функции объект созданный в стеке при этом копи конструктор публичный. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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