Hello, experts! Сейчас участвую в одном проекте, целью которого является решение задач физики (в частности по электродинамике). Посему, возникает у меня такой вопрос: как можно реализовать в VC контроль и анализ размерности физ. величин. Например, если int x – это редиски, а int у – это морковки, то выражение x+y не проходило, а 2*x – проходило? А может кто делал что-то подобное?
Здравствуйте, matrixman! Ну какие проблемы? реализуй два класса. class carrot {}; class ... как там редиски то по английски? :)) и все. не создавай для них операцию сложения и их нельзя будет сложить.
Приложение: Ответ отправлен: 30.09.2002, 10:50 Отправитель: Dron Отвечает Biv
Приветствую Вас, matrixman! На первом курсе, я делал нечто подобное (даже очень подобное) и решал сию проблему так. Каждая величина есть класс, что-то типа: class rediska { int kolichestvo; int svoistvo; // Свойство - идентификатор продукта operator+(...); // Перегружаем операторы, проверяя operator-(...); // совместимость продуктов ... }; Что касается умножения и деления, то тут ужу несколько иное и необходимо смотреть непосредственно на проблему, хотя в физике, умножение и деление не очень критично к размерености. С уважением Biv. Ответ отправлен: 28.09.2002, 18:55 Отправитель: Biv Отвечает Pablo
Доброе время суток, matrixman! Ну попробуй определить для каждой переменной класс, который будет ее определять и для компилятора и для программы, а в каждом из классов определи операторы, которые можно использовать для каждой из величин. И так как тебе не нужно определять операторы сложения двух несовместимых величин, то компилятор и будет ругаться на то, что такое действие неопределено или невозможно, это то как раз тебе и нужно. class morkovka{ int value; public: friend morkovka __fastcall operator +(const int val, const morkovka& rhs) { morkovka cls; cls.value = val + rhs.value; return cls; }; morkovka __fastcall operator +(const morkovka& rhs) const { morkovka cls; cls.value = value + rhs.value; return cls; }; }; class rediska { int value; public: friend rediska __fastcall operator +(const
int val, const rediska& rhs); rediska __fastcall operator +(const rediska& rhs) const; } Ну так вот при суммировании показанном ниже будет вылетать ошибка: movkovka k; rediska l,l1; l1 = l + k;
Ответ отправлен: 30.09.2002, 15:40 Отправитель: Pablo Отвечает Jadd
Здравствуйте, matrixman! бррр...ты сформулируй конкретнее задачу. Ты, вроде как, физикой занимаешься, а не плодова-овощной программой. Ответ отправлен: 29.09.2002, 02:15 Отправитель: Jadd Отвечает Илья
Здравствуйте, matrixman! А нельзя создать классы "морковка" , "редиска"... И перегрузить для них операторы + - = .... ??? Ответ отправлен: 29.09.2002, 21:20 Отправитель: Илья Отвечает Kiss
Добрый день, matrixman! В смысле ты имееш в виду что бы нельзя было скрестить морковку с редиской? То это очень просто зделать условиями если я правильно понял.
Ответ отправлен: 01.10.2002, 11:06 Отправитель: Kiss
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.