Другие языки программирования и технологии

Помогите пожалуйста исправить код программы на visual c++!!

Описать класс, реализующий шестнадцатеричный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, — и свойство,позволяющее получить его текущее состояние. При выходе за границы диапазона выбрасываются исключения.Написать программу, демонстрирующую все разработанные элементы класса. Кто сделает тому большое спасибо от меня!!! Добавлено 1 час назад public class Counter16 { private int counter; private int min; private int max; public Counter16() { counter = 0; min = -16; max = 16; CheckBounres(); } public Counter16(int counter) { this.counter = counter; min = -16; max = 16; CheckBounres(); } public Counter16(int counter, int min, int max) { this.counter = counter; this.min = min; this.max = max; CheckBounres(); } private void CheckBounres() { if (counter > max || counter < min) { throw new Exception("Выход за пределы границ"); } } public int Inc() { counter++; CheckBounres(); return counter; } public int Dec() { counter--; CheckBounres(); return counter; } public override string ToString() { return string.Format("0x{0:X} [0x{1:X},0x{2:X}]", counter, min, max); } вот попытка моя....что сдесь не так?
не так тут то, что ваш код - на C#, а вы пишете, что нужен C++
исключение следует выбрасывать перед изменением значения.
шестнадцатеричный - хз как тут вообще применить это определение, но это явно не диапазон [-16, 16]
Код C#:
struct Range
{
private readonly int _min;
private readonly int _max;

public Range(int min, int max)
{
if (min > max)
throw new ArgumentException();

_min = min;
_max = max;
}

public bool Contains(int value)
{
return value >= _min && value <= _max;
}

public override string ToString()
{
return string.Format("[{0}, {1}]", _min, _max);
}
}

class Counter
{
private Range _range;
private int _value;

public Counter(Range range, int value)
{
if (!range.Contains(value))
throw new ArgumentException(string.Format("Value {0} not in {1}", value, range));

_range = range;
_value = value;
}

public int Value
{
get { return _value; }
}

public void Increment()
{
SetValue(Value + 1);
}

public void Decrement()
{
SetValue(Value - 1);
}

private void SetValue(int next)
{
if (!_range.Contains(next))
throw new InvalidOperationException();

_value = next;
}
}
Сергей Володин
Сергей Володин
9 617
Лучший ответ
а что вообще такое шестнадцатеричный счётчик? почему он у тебя имеет границы от -16 до +16? вообще-то шестнадцатеричное число может быть любым, система счисления его не ограничивает.. .

в конструкторе public Counter16(), чтобы не дублировать код, просто вызывай public Counter16(0)
а в конструкторе public Counter16(int counter) , соответственно, просто вызывай public Counter16(counter, -16, 16)

я бы функцию private void CheckBounres() переписал как public bool CheckBounres(int value), и пусть возвращает true или false - после простой проверки необязательно кидать исключение.

тогда бы ты смог в методах dec и inc сначала проверять полученное значение на корректность, а потом уже думать, менять ли текущее значение. А то ты сначала переменную запорол некорректным значением, а потом исключение кидаешь.
Артем Шадрин
Артем Шадрин
2 571