Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
#1

Перегрузка оператора + для сложения двух экземпляров класса - C++

21.08.2014, 22:16. Просмотров 873. Ответов 9
Метки нет (Все метки)

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
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <clocale>
using namespace::std;
class str_type{
    char string[80];
public:
    str_type(char *str = ""){ strcpy(string, str); }
    str_type operator+(str_type str);
    str_type operator+(char *str);
    void show_str(){ cout << string; }
};
str_type str_type::operator+(str_type str)
{
    str_type temp;
        strcpy(temp.string, string);
        strcat(temp.string, str.string);
        return temp;
}
str_type str_type::operator+(char *str)
{
    str_type temp;
    strcpy(temp.string, string);
    strcat(temp.string, str);
    return temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "Rus");
    str_type a("Всем "), b("привет"), c;
    c = a + "привет";
    c.show_str();
    _getch();
    return 0;
}
Как перегрузить operator+, чтобы можно было писать c = "привет" + a ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 22:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора + для сложения двух экземпляров класса (C++):

Перегрузка operator< для двух экземпляров класса отрезок - C++
Всем добра, в классе отрезок хочу перегрузить операцию &lt; правильно ли я сделал ? При этом отрезок с координатами x1=1 y1=1 и x2=4 y2=4...

Перегрузка оператора +, для сложения координат 2х векторов - C++
Задание: разработать абстрактный тип данных &quot;Вектор&quot;. АТД должен обеспечивать : ввод\вывод векторов,сложение\вычитание,перемножение на...

Перегрузка оператора >> для дочернего класса от базового виртуального класса - C++
Доброго вам времени суток! Программирую на С++ не давно, в связи с отсутствием должного времени на поиск ответа в глубинах учебников,...

Перегрузка оператора для класса - C++
Здравствуйте! Подскажите, пожалуйста, почему так не работает: class ClassA { public: ClassA() { m = 1; ...

Перегрузка оператора -> для шаблонного класса - C++
Здравствуйте! Возникла проблема: не могу додуматься как перегрузить оператор -&gt; так, чтобы он корректно работал. Вот код: template&lt;class...

Перегрузка оператора- для шаблона класса - C++
Ребят подскажите что не так я делаю или подтолкните в нужное русло =\ З.Ы. Массивы будем рассматривать одинаковой длины. #include...

9
Убежденный
Ушел с форума
Эксперт С++
15701 / 7211 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
21.08.2014, 22:23 #2
Реализовать его как свободную функцию (не член класса).
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
21.08.2014, 22:24 #3
1) не писать так, а сначала "Привет" привести к типу вашего класса
2)зафрендить operator+(const char* str, const str_type& rhs)
1
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
21.08.2014, 22:43 #4
aLarman, френдить функции плохо с точки зрения инкапсуляции. Лучше как сказал Убежденный, + не explicit конструктор.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
21.08.2014, 23:04 #5
gromo, чет не ясно чем это плохо), расскажите?
а он имел ввиду разве не friend ф-цию? а если не ее, то как получить доступ к закрытым членам класса?
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,047
Записей в блоге: 17
21.08.2014, 23:18 #6
Цитата Сообщение от gromo Посмотреть сообщение
френдить функции плохо с точки зрения инкапсуляции
Ну применение френда в данном случает стандартное решение.
0
ASCII
90 / 63 / 10
Регистрация: 15.12.2013
Сообщений: 407
Завершенные тесты: 2
21.08.2014, 23:35 #7
C++
1
2
3
4
5
6
7
8
// в объявлении класса напиши friend str_type operator+(str_type, str_type);
str_type operator+(str_type fstr, str_type sstr)
{
    str_type temp_str;
    strcpy(fstr.string, sstr.string);
    strcpy(temp_str.string, fstr.string);
    return temp_str;
}
Попробуй так
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2014, 23:55 #8
Цитата Сообщение от Avazart Посмотреть сообщение
Ну применение френда в данном случает стандартное решение.
нет, стандартное решение это
C++
1
2
3
4
5
Foo operator + (const Foo& a, const Foo& b)
{
    Foo result(a);
    return result += b;
}
0
John Prick
805 / 738 / 146
Регистрация: 27.07.2012
Сообщений: 2,110
Завершенные тесты: 3
21.08.2014, 23:57 #9
В качестве функции-члена класса можно определить оператор operator+=, а сложение двух экземпляров класса реализовать через него:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class some_class
{
public:
    some_class & operator+=(const some_class & that)
    {
        /* логика сложения */
        return *this;
    }
};
 
some_class operator+(const some_cless & x, const some_class & y)
{
    some_class z(x);
    z += y;
    return z;
}
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,047
Записей в блоге: 17
22.08.2014, 00:14 #10
Цитата Сообщение от Jupiter Посмотреть сообщение
нет, стандартное решение это
У нас разные типы слева и справа, и без конструктора не справится.
0
22.08.2014, 00:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 00:14
Привет! Вот еще темы с ответами:

Перегрузка оператора + для класса Date - C++
Здравствуйте! Как правильно перегрузить оператор +(Date, int) для класса Date, чтобы дата увеличивалась на нужное количество дней? При этом...

Перегрузка оператора ( ) для объектов класса - C++
Здравствуйте! перегрузили оператор (). Каким образом компилятор поймет где мы вызываем оператор (), а где , например, конструктор? каким...

Перегрузка оператора сложения - C++
Добрый день. Есть вот эта перегрузка оператора сложения для класса многочлена. Polynom Polynom::operator+(Polynom P) { Polynom...

Перегрузка оператора сложения - C++
У меня есть класс, который содержит в себе строку и ее длину. Класс распределяет динамическую память для хранения строки. Передо мной стоит...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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