Консультация № 60984
02.11.2006, 00:08
0.00 руб.
0 4 3
Привет сноваЕще один вопрос.
Например у меня есть переменная int х=0;
Со временем она изменяется. Можно зделать так, чтобы когда она будет ровна х=75 вызвалась определенная функция, но не проверяя ее с помощю оператора if (x==75)?

Обсуждение

Неизвестный
02.11.2006, 09:56
общий
это ответ
Здравствуйте, Etenity!
Нет, нельзя, если это просто переменная.
Неизвестный
02.11.2006, 11:11
общий
это ответ
Здравствуйте, Etenity!
Если использовать C#, то это не составит проблем. Достаточно объявить саму переменную как private и назначить public property:

...
private int x;

public int X
{
get { return x; }
set
{
if (value == 75)
... // вызываем нужную нам функцию или проводим
// нужную работу прямо здесь
x = value;
}
}
...

Здесь использована чувствительнось всех C-языков к регистру букв, поэтому название свойства (property) и название переменной похожи, различаясь только регистром.

Увы, эта технология применима только к C#, и для C++ придётся искать другой способ. К сожалению, я этого способа не знаю.
Неизвестный
02.11.2006, 15:36
общий
Насчет непросто переменной - в некоторых средах (BCB, C#) есть понятие свойств (property) - см. ответ Delph‘а. Оно правда относится только к членам классов. К свойствам можно синтаксически обращаться как к переменным-членам (вспомните в BCB: Form1->Width=100;...), но на самом деле происходит вызов метода (типа SetWidth()) и там уже может происходить куча всего, в т.ч. можно отследить момент установки свойства в нужное Вам значение).Просто переменная int на C это выделенная (в вашем случае в стеке) область памяти размеров sizeof(int) и никто за ее содержимым следить не будет, кроме Вас, конечно, если захотите.
Неизвестный
02.11.2006, 18:25
общий
это ответ
Здравствуйте, Etenity!
Если придерживаться только ANSI C++, то можно использовать перегрузку оператора "=".
Но в конечном счете все способы представляют собой простое сокрытие реализации,
и проверка value==75 в том или ином виде всегда присутствует.
Форма ответа