САБЖ Такой вопрос Есть два класса: CODDING a, b; Код (Text): class CODDING { public: int obiemi_rabot; int cena; int koli4estvo_mozgoebki; int neobxodimoe_koli4estvo_piva; } Как производить простейшие операции над данными классами? Например нужно получить класс с = a + b; При попытке суммирования компилятор ругается. Где можно почитать про простейшие операции над классами? Заранее благодарен
Думаю, последовательный поэлементный ADD спасёт отца русской демократии. Берём первый кусок памяти, находим его размер, заводим указатель и складываем его со вторым куском отдельными DWORD-ами. Продолжаем до тех пор пока не превышен найденный нами размер структуры.
Magnum Тебе нужна перегрузка операторов (operator overloading). Booster На самом деле, вопрос более глубок, чем кажется. Есть мнение, что для того, чтобы корректно реализовать поддержку математических операций, надо понимать группы, кольца и поля (это математические поля) и их свойства . Лично мне представляется, что перегрузка операторов - зло, делающее код нечитабельным .
DEEP ну это понятно. Создать метод class_add(...) в котором будут складываться элементы. Либо складывать дворды. Либо еще как-то. Но мне где-то писали (тут же на форуме), что классы помогают абстрагироваться от мелочей и вполне допустимы операции типо A + B для целых классов. Я вот и думаю, может без лишнего гемора можно как-то подобное сложение провести? Описать просто где-то и все...
Aquila о, это оно. спасибо. Booster Что я не шарю. Укажите где у меня пробелы и какие учебники(и главы) нужно в зубы ))))
Раньше бы я тоже шутливо к этому отнёсся. Но на самом деле всё довольно серьёзно: программист, реализуя классы с перегрузкой операторов, должен одавать отчёт, есть ли поддерживаются ли множеством, которое олицетворяет класс, операции коммутативности, ассоциативности, дистрибутивности, есть ли в нём понятие "ноля" или "единицы" и т.п.
Aquila Это само собой, врядли кому в голову придёт мысль подключение к базе обзывать оператором ++. Математические операции и делаются для подобных множеств.
class A { public: int a; int b; int c; A operator +(const A& obj) { A t; t.a = a + obj.a; t.b = b + obj.b; t.c = c + obj.c; return t; } };
Magnum Да похоже что везде. Про геттеры и сеттеры уже говорили в прошлых темах, а ты весь класс превратил в простую структуру(ещё и название с большой буквы, ну точно издержки программирования на WinAPI). Ты вообще возьми и прочитай хотя бы один учебник по С++, прежде, чем пытаться работать с С++. Aquila Записывать формулы последовательностью вызовов методов/функций -- ещё большее зло, делающее код ещё более нечитабельным и менее абстрактным Перегрузка должна вытекать из реальных требований. Она просто должна быть логична. Сложение векторов/комп. чисел/матриц логично и привыно записывается по одним и тем же математическим правилам. Складывать две машины или две кнопки нелогично
W4FhLF да и так читаю потихоньку.... отсюда и вопросы всплывают.... так и есть.... до этого на чистых апи писал...
Magnum, вообще считаю правильным подход asm->asm+api->c+api->(c++)+api. получается более глубокое понимание того, что пишешь
bigredcat A& operator +(A& obj) { a += obj.a; b += obj.b; c += obj.c; return *this; } Зачем при сложении менять исходный объект?
Кнечно незачем. Бес попутал Код (Text): A operator +(const A& obj) { A t; t.a = a + obj.a; t.b = b + obj.b; t.c = c + obj.c; return t; }