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

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

Восстановить пароль Регистрация
 
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
21.08.2014, 22:16     Перегрузка оператора + для сложения двух экземпляров класса #1
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 ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 22:16     Перегрузка оператора + для сложения двух экземпляров класса
Посмотрите здесь:

Перегрузка оператора- для шаблона класса C++
C++ Перегрузка оператора сложения
C++ Перегрузка оператора '+' для char* вне класса
C++ перегрузка оператора+ для сложения массива объекта
Перегрузка оператора ( ) для объектов класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14191 / 6206 / 985
Регистрация: 02.05.2013
Сообщений: 10,339
Завершенные тесты: 1
21.08.2014, 22:23     Перегрузка оператора + для сложения двух экземпляров класса #2
Реализовать его как свободную функцию (не член класса).
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 22:24     Перегрузка оператора + для сложения двух экземпляров класса #3
1) не писать так, а сначала "Привет" привести к типу вашего класса
2)зафрендить operator+(const char* str, const str_type& rhs)
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
21.08.2014, 22:43     Перегрузка оператора + для сложения двух экземпляров класса #4
aLarman, френдить функции плохо с точки зрения инкапсуляции. Лучше как сказал Убежденный, + не explicit конструктор.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 23:04     Перегрузка оператора + для сложения двух экземпляров класса #5
gromo, чет не ясно чем это плохо), расскажите?
а он имел ввиду разве не friend ф-цию? а если не ее, то как получить доступ к закрытым членам класса?
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
21.08.2014, 23:18     Перегрузка оператора + для сложения двух экземпляров класса #6
Цитата Сообщение от gromo Посмотреть сообщение
френдить функции плохо с точки зрения инкапсуляции
Ну применение френда в данном случает стандартное решение.
ASCII
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 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;
}
Попробуй так
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 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;
}
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 00:14     Перегрузка оператора + для сложения двух экземпляров класса
Еще ссылки по теме:

Перегрузка оператора сложения C++
Перегрузка оператора сложения C++
C++ Перегрузка оператора + для сложения матриц (С++, ООП, Классы, WinForms)

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
22.08.2014, 00:14     Перегрузка оператора + для сложения двух экземпляров класса #10
Цитата Сообщение от Jupiter Посмотреть сообщение
нет, стандартное решение это
У нас разные типы слева и справа, и без конструктора не справится.
Yandex
Объявления
22.08.2014, 00:14     Перегрузка оператора + для сложения двух экземпляров класса
Ответ Создать тему
Опции темы

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