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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
#1

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

19.11.2013, 14:03. Просмотров 535. Ответов 11
Метки нет (Все метки)

Есть некоторые классы
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;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 14:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение классов (C++):

Сложение объектов базового и наследуемых классов через виртуальную функцию - C++
Нужно определить базовый класс с виртуальной функцией сложения. Кроме того перегрузка этой же виртуальной функции должна складывать...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов - C++
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) - C++
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс - C++
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...

Преобразования объектов классов в объекты других классов - C++
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include "stdafx.h" class A //Создаем класс А { int mA; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 519
Завершенные тесты: 1
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
463 / 312 / 26
Регистрация: 22.03.2011
Сообщений: 1,021
Завершенные тесты: 2
19.11.2013, 17:06 #7
Для этого придумали конструктор и композицию.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.11.2013, 17:18 #8
Цитата Сообщение от Сонца Посмотреть сообщение
Что такое множество я пока не знаю
Это математический термин.
Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
19.11.2013, 17:28  [ТС] #9
Цитата Сообщение от stima Посмотреть сообщение
Для этого придумали конструктор и композицию.
Обо всем и ни о чем.
Я тоже много красивых слов знаю и если бы могла решить задачу, не писала бы здесь.
Иногда, однако, стоит помнить, что по ту сторону монитора сидит человек без ваших знаний и навыков, а значит выражать мысли нужно подробнее двух слов. Или же не выражать вовсе, если лень.

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

Не по теме:

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

zss
Модератор
Эксперт С++
6357 / 5921 / 1919
Регистрация: 18.12.2011
Сообщений: 15,217
Завершенные тесты: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 18:55
Привет! Вот еще темы с ответами:

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Не выполняется сложение - C++
#include <iostream> #define N 30 using namespace std; class Numizmatika { friend class Bulavki; friend class Znachki; ...

Сложение полинома - C++
Помогите устранить ошибку в коде #include <iostream> #include <conio.h> using namespace std; class Polynom { unsigned int...

Сложение дат - C++
Вообщем при складывании дат имеется кусочек: day=day+d1; while (month==1 && day>31 || month==3 && day>31 || month==5 && day>31 ||...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.11.2013, 18:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru