powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическая локальная переменная
25 сообщений из 60, страница 1 из 3
Автоматическая локальная переменная
    #38342352
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Chudo chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }



Результат работы
Код: plaintext
1.
1231



Возможно ли создание такого чудного класса на плюсах? Если да, то как?
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342397
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,
Код: plaintext
1.
void b( Chudo chudo ) {...}

имхо, только так
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342492
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychLumix,
Код: plaintext
1.
void b( Chudo chudo ) {...}

имхо, только так

По-моему вы не поняли задачу. Или я путанно объяснил. Посмотрите ещё раз на результат работы.

Может вот так понятнее будет.

Код: plaintext
1.
2.
3.
4.
class Chudo { ... } chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }
main() { a(); } // => 1231
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342501
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixИли я путанно объяснил.
Ты вообще ничего не объяснил. Твой пример будет работать после модификации на ровно одно
слово:
Код: sql
1.
2.
3.
4.
class Chudo { ... } chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { Chudo chudo = 2; print(chudo); chudo++; print(chudo);  }
main() { a(); } // => 1231


Но ты как партизан молчишь почему тебе не хочется так сделать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342576
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо ты как партизан молчишь почему тебе не хочется так сделать.


Тут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.

Крейзи вариант этого задачи я пока не оглашаю, чтобы не нервировать людей, но наверное и так все догадались, что этот чудообъект нужен для рекурсивного алгоритма.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.
Уволить к чертям того, кто такую задачу поставил.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342607
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyLumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.
Уволить к чертям того, кто такую задачу поставил.

...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342637
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
LumixВозможно ли создание такого чудного класса на плюсах? Если да, то как?Невозможно
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342690
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.

Крейзи вариант этого задачи я пока не оглашаю, чтобы не нервировать людей, но наверное и так все догадались, что этот чудообъект нужен для рекурсивного алгоритма.

Оглашай крейзи вариант уже.

А то что значит, что "ведёт он себя локально" -- не ясно.
Также не забудь написать, что делает великолепная функция 'print'.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342703
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переход через границу функции туда и сюда надо как-то отслеживать по-любому.
Это возможно, но автоматом это сделать не получится, надо создавать какой-то объект. После этого все остальные части задачи будут уже легкорешаемы.

Создание объекта можно будте завуалировать после этого в каких-то макросах.
типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void foo()
{
   START_FUNCTION(foo);

   // код

   END_FUNCTION(foo);
}



При этом конечно же END_FUNCTION(foo); только для красоты, для функционала нужен только START_FUNCTION.
Имя тоже не нужно (оно есть в стандартных и не очень стандартных предопределённых макросах).
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342710
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixМожет вот так понятнее будет.да я понял, чё тут было не понятного.

LumixСоздание объекта, который является глобальным, но ведет себя локально в зависимости от места использованиятакая задача не решается. Надо просто поменять её постановку, или описать изначальную задачу. Видимо, она как-то связана с вашими последними топиками в программировании, но сил нет додумывать её самостоятельно.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342722
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПереход через границу функции туда и сюда надо как-то отслеживать по-любому.
Это возможно, но автоматом это сделать не получится, надо создавать какой-то объект. После этого все остальные части задачи будут уже легкорешаемы.



Ручной вариант уже рассматривали

Код: plaintext
1.
2.
void a() { uniqe i; chudo(i) = 1; print(chudo(i)); b(); print(chudo(i)); }
void b() { uniqe i; chudo(i) = 2; print(chudo(i)); chudo(i)++; print(chudo(i));  }



но с локальной переменной получается проще

Код: plaintext
1.
2.
void a() { Chudo chudo = 1; print(chudo); b(); print(chudo); }
void b() { Сhudo chudo = 2; print(chudo); chudo++; print(chudo);  }



MasterZivТакже не забудь написать, что делает великолепная функция 'print'.

В данном случае это абсолютно неважно, я просто привел её в качестве дампера, чтобы всем было понятно где на каком этапе какой значение.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342729
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychНадо просто поменять её постановку, или описать изначальную задачу. Видимо, она как-то связана с вашими последними топиками в программировании, но сил нет додумывать её самостоятельно.

Эта тема никак не связана с другими темами. Она сама по себе.
Я в принципе понимаю, ответ на мой вопрос: <b>нет</b>, но задал уж так может есть в плюсах какие-то глубокие фишки для таких случаев, тем более щас появился С++11 и я пока толком не знаю всей его глубины.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342780
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix
Код: plaintext
1.
2.
3.
Chudo chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }



Результат работы
Код: plaintext
1.
1231



Возможно ли создание такого чудного класса на плюсах? Если да, то как?


гуглить
operator=(....);
operator int();

Но с принтЭфом и прочими функциями с переменным количестом аргументов
без явного приведения к типу ИМХО(вроде не приснилось) работать не будет.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342783
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЯ в принципе понимаю, ответ на мой вопрос: <b>нет</b>, но задал уж так может есть в плюсах какие-то глубокие фишки для таких случаев, тем более щас появился С++11 и я пока толком не знаю всей его глубины.

ответ да ,
но с определенным количество нетривиальных ограничений .
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342789
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР,

Операторы никакие не помогут, тут надо ловить переход через границу функции, это надо каких-то акторов или
CLOS pre- post- методов.
В С++ этого нет.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342869
pre-post
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

pre/post можно добавить как-нибудь так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class Chudo
{
public:
    begin_level() {/*whatever to begin level*/};
    end_level() {/*whatever to end level*/};
};

class Level
{
    Chudo &_chudo;

public:
    Level(Chudo &chudo) : _chudo(chudo){ _chudo.begin_level();}
    ~Level() { _chudo.end_level();}
}

Chudo chudo;
a() { Level(chudo); bla-bla-bla;}
b() { Level(chudo); bla-bla-bla; a(); bla-bla-bla; }

void main()
{
    b();
}
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342893
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pre-post,

имхо те же яйца только сбоку. Получается, что единственный инструмент "из коробки" для таких случае это только локальная переменная.

Видимо для таких целей была придумана шняга под названием аспектно-ориентированное программирование, но что-то она больно мозги в трубочку сворачивает.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342922
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то я никак не пойму. А зачем это все?
Можно более-менее реальный пример когда подобные трюки могут быть полезны?
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342927
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧего-то я никак не пойму. А зачем это все?
Можно более-менее реальный пример когда подобные трюки могут быть полезны?

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

Например, по вопросу заданному в этой теме крутые спецы посмотрели и сказали, что автоподкапотных шняг тут замутить не получится. Мне этого вердикта достаточно и я благодарен им за то, что уделили время и свою квалификацию. Теперь я буду знать, что ничего кроме локальной переменной в данном случае не поможет и что локальная переменная это единственный "автоматический" механизм маркирования атомарных подпространств.

В реальном проекте принято решение остановиться на вариенте с автоуниками, которые маркируют подпространства, то есть тот пример, где я показал chudo(i) = 1, chudo(i)++, chudo(i).func(), ...

Ещё раз спасибо всем, кто отписался в теме.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342951
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quo]сформулировать её[/quot] в этом основная проблема на мой взгляд ))
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342953
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixВ реальном проекте
такой херью не стадают
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343083
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.Глобально какой нужен функционал?
Получаем доступ ко всем локальным объектам:
Код: plaintext
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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
#include <iostream>
#include <vector>

using namespace std;

class Chudo
{
protected:
    int val;
    static vector<Chudo *> locals;

public:
    Chudo()
    {
        locals.push_back(this);
        val=-1;
    }

    ~Chudo()
    {
        locals.pop_back();
    }

    void operator++ ()
    {
        ++val;
    }

    void print()
    {
        cout<<val<<endl;
    }

    void operator= (int v)
    {
        val=v;
    }

    void print_locals()
    {
        for(unsigned int i=0; i<locals.size(); i++)
        {
            cout<<"local_"<<i<<" = "<<locals[i]->val<<endl;
        }
    }
};
vector<Chudo *> Chudo::locals;

void b()
{ Chudo c,d; c=2; c.print(); ++c; c.print(); c.print_locals(); }
void a()
{ Chudo c,d; c=1; c.print(); c.print_locals(); b(); c.print(); c.print_locals(); }

int main()
{
    a();
    return 0;
}

...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343210
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Lumix, Почему собственно "локальная" подразумевается на уровне функции? В С++ концепция локальности несколько шире.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
main() 
{
  int i = 1;
  std::cout << i;
  { 
    int  i = 2;
    std::cout << i;
  }
  std::cout << i;
}
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343345
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин Сергей[quo]сформулировать её в этом основная проблема на мой взгляд ))[/quot]

Проблема не в том, чтобы сформулировать задачу, а в том, чтобы сформулировать её troll-safe. Например, даже при формулировании такой малюсенькой задачки, некоторые персонажи подумали, что это задача про перегрузку операторов и стали активно отвлекать внимание именно на этом аспекте.
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическая локальная переменная
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]