Как складывать классы?

Тема в разделе "LANGS.C", создана пользователем Magnum, 6 сен 2008.

  1. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    САБЖ

    Такой вопрос
    Есть два класса:

    CODDING a, b;

    Код (Text):
    1. class CODDING
    2. {
    3. public:
    4.    int obiemi_rabot;
    5.    int cena;
    6.    int koli4estvo_mozgoebki;
    7.    int neobxodimoe_koli4estvo_piva;
    8. }
    Как производить простейшие операции над данными классами?
    Например нужно получить класс с = a + b;

    При попытке суммирования компилятор ругается.


    Где можно почитать про простейшие операции над классами?
    Заранее благодарен
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Magnum
    Прикалываешься что-ли? )
     
  3. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Думаю, последовательный поэлементный ADD спасёт отца русской демократии. Берём первый кусок памяти, находим его размер, заводим указатель и складываем его со вторым куском отдельными DWORD-ами. Продолжаем до тех пор пока не превышен найденный нами размер структуры.
     
  4. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
  5. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Magnum
    Тебе нужна перегрузка операторов (operator overloading).

    Booster
    На самом деле, вопрос более глубок, чем кажется. Есть мнение, что для того, чтобы корректно реализовать поддержку математических операций, надо понимать группы, кольца и поля (это математические поля) и их свойства :).

    Лично мне представляется, что перегрузка операторов - зло, делающее код нечитабельным :).
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Aquila
    Я смотрю у тебя сегодня тоже хорошее настроение. )
     
  7. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    DEEP
    ну это понятно. Создать метод class_add(...) в котором будут складываться элементы. Либо складывать дворды. Либо еще как-то.

    Но мне где-то писали (тут же на форуме), что классы помогают абстрагироваться от мелочей и вполне допустимы операции типо A + B для целых классов.

    Я вот и думаю, может без лишнего гемора можно как-то подобное сложение провести? Описать просто где-то и все...
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Magnum
    Ты совсем в плюсах не шаришь? Тоды учебник в зубы и вперёд.
     
  9. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Aquila
    о, это оно.
    спасибо.


    Booster
    :) Что я не шарю. :) Укажите где у меня пробелы и какие учебники(и главы) нужно в зубы ))))
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Magnum
    Я от такого напора даже растерялся немного.)
     
  11. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Раньше бы я тоже шутливо к этому отнёсся. Но на самом деле всё довольно серьёзно: программист, реализуя классы с перегрузкой операторов, должен одавать отчёт, есть ли поддерживаются ли множеством, которое олицетворяет класс, операции коммутативности, ассоциативности, дистрибутивности, есть ли в нём понятие "ноля" или "единицы" и т.п. :)
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Aquila
    Это само собой, врядли кому в голову придёт мысль подключение к базе обзывать оператором ++. Математические операции и делаются для подобных множеств.
     
  13. bigredcat

    bigredcat New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    54
    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;
    }
    };
     
  14. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Magnum
    Да похоже что везде. Про геттеры и сеттеры уже говорили в прошлых темах, а ты весь класс превратил в простую структуру(ещё и название с большой буквы, ну точно издержки программирования на WinAPI).
    Ты вообще возьми и прочитай хотя бы один учебник по С++, прежде, чем пытаться работать с С++.

    Aquila
    Записывать формулы последовательностью вызовов методов/функций -- ещё большее зло, делающее код ещё более нечитабельным и менее абстрактным :)

    Перегрузка должна вытекать из реальных требований. Она просто должна быть логична. Сложение векторов/комп. чисел/матриц логично и привыно записывается по одним и тем же математическим правилам. Складывать две машины или две кнопки нелогично :)
     
  15. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    W4FhLF
    :) да и так читаю потихоньку.... отсюда и вопросы всплывают....
    так и есть.... до этого на чистых апи писал...
     
  16. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Magnum, вообще считаю правильным подход asm->asm+api->c+api->(c++)+api. получается более глубокое понимание того, что пишешь
     
  17. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Какой-то замкнутый круг. Вся жизнь вокруг API :)
     
  18. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    bigredcat
    A& operator +(A& obj)
    {
    a += obj.a;
    b += obj.b;
    c += obj.c;
    return *this;
    }


    Зачем при сложении менять исходный объект?
     
  19. bigredcat

    bigredcat New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    54
    Кнечно незачем. Бес попутал;)
    Код (Text):
    1.     A operator +(const A& obj)
    2.     {
    3.         A t;
    4.         t.a = a + obj.a;
    5.         t.b = b + obj.b;
    6.         t.c = c + obj.c;
    7.         return t;
    8.     }