Форум программистов, компьютерный форум CyberForum.ru

Сложение классов - C++

Восстановить пароль Регистрация
 
Сонца
 Аватар для Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
19.11.2013, 14:03     Сложение классов #1
Есть некоторые классы
C++
1
2
3
4
5
6
7
class A {/*...*/};
class B{/*...*/};
class C
{
    A a;
    B b;
};
Как перегрузить +, чтобы следующая запись была верна? Моя фантазия, видимо, иссякла.
C++
1
2
A a; B b; C c;
c = a + b;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
19.11.2013, 15:11     Сложение классов #2
Тут надо чтоб класс был один и тот же:
C++
1
class A{.....};
,
C++
1
2
3
4
5
6
7
8
int main()
{
   A a1;
   A a2;
   A a3;
   a3 = a1 + a2;
 
}
я конечно тоже не гуру, но для перегруженного оператора так должно быть
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.11.2013, 15:26     Сложение классов #3
Если просто хочется, чтобы запись c = a + b; "съедалась" компилятором, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class B;
class C;
 
class A 
{
public:
    C operator+ (const B&);
};
class B {/*...*/};
class C
{
    A a;
    B b;
};
 
C A::operator+ (const B&)
{
    return C();
}
 
int main() {
    
   A a;
   B b;
   C c;
   c = a + b;
   return 0;
}
Сонца
 Аватар для Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
19.11.2013, 16:16  [ТС]     Сложение классов #4
Tulosba, у меня с десяток ошибок при такой записи, хотя "ничего и не подчеркивает".

Может я неправильно понимаю что мне нужно, но задача в том, что есть некоторые классы, являющиеся компонентами другого.... кхм.. в общем есть корпус, грифель, ластик и карандаш, как все вышеупомянутое вместе. В программе должна корректно работать запись: Карандаш = корпус + грифель + ластик.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.11.2013, 16:26     Сложение классов #5
Цитата Сообщение от Сонца Посмотреть сообщение
у меня с десяток ошибок при такой записи
Ошибок нет. http://ideone.com/T8pjTD
Цитата Сообщение от Сонца Посмотреть сообщение
Карандаш = корпус + грифель + ластик.
Тут, мне кажется, должно быть что-то типа "множества". Т.е. "карандаш" есть множество, состоящее из объектов "корпус", "грифель", "ластик". Соответственно операция сложения объектов должна давать множество.
Имхо, мне отсюда кажется так
Сонца
 Аватар для Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
19.11.2013, 17:04  [ТС]     Сложение классов #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Ошибок нет.
Я проверяла на своем примере, так что может я что-то не учла за гранью примера.
Что такое множество я пока не знаю

Благодарю за внимание.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
19.11.2013, 17:06     Сложение классов #7
Для этого придумали конструктор и композицию.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.11.2013, 17:18     Сложение классов #8
Цитата Сообщение от Сонца Посмотреть сообщение
Что такое множество я пока не знаю
Это математический термин.
Сонца
 Аватар для Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
19.11.2013, 17:28  [ТС]     Сложение классов #9
Цитата Сообщение от stima Посмотреть сообщение
Для этого придумали конструктор и композицию.
Обо всем и ни о чем.
Я тоже много красивых слов знаю и если бы могла решить задачу, не писала бы здесь.
Иногда, однако, стоит помнить, что по ту сторону монитора сидит человек без ваших знаний и навыков, а значит выражать мысли нужно подробнее двух слов. Или же не выражать вовсе, если лень.

Добавлено через 6 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
Это математический термин.
я не представляю какая у него будет "отличительная особенность как программного кода или как его организовать
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
19.11.2013, 17:30     Сложение классов #10
Вы не знаете, что такое конструктор и собрались складывать N Обьектов? Если вы не знаете, что такое композиция, то запрос в гугл "c++ композиция" намного короче чем Ваше высказывание.
Tulosba
19.11.2013, 17:42
  #11

Не по теме:

Цитата Сообщение от Сонца Посмотреть сообщение
Или же не выражать вовсе, если лень.
Никто тут не имеет понятия о Вашем уровне знаний. Поэтому и разжевывать всё до символов Вам никто не будет. По-крайней мере сразу, пока не прояснится ситуация с Вашей базовой подготовкой. А некоторые ответы, например, что такое конструктор, правильнее почерпнуть из книг, или, на крайний случай, статей в интернете. Вместо того, чтобы спрашивать об этом на форуме.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 18:55     Сложение классов
Еще ссылки по теме:

C++ Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс
C++ Не выполняется сложение
C++ Рекурсивное сложение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
19.11.2013, 18:55     Сложение классов #12
Предлагаю интересный пример с применением перечисления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
enum kansnames{pen,lastic,grifel,karandash};
class Kans 
{
 
protected:
    kansnames kn;
public:
    Kans(kansnames k=pen)
    {
        kn=k;
    }
    Kans operator+(const Kans &x)
    {
        kansnames t=kansnames(kn+x.kn);
        return t;
    }
    
 };
 
int main()
{
    Kans Pen(pen),Lastic(lastic),Grifel(grifel),D;
    D=Pen+Lastic+Grifel;
}
Yandex
Объявления
19.11.2013, 18:55     Сложение классов
Ответ Создать тему
Опции темы

Текущее время: 02:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru