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

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

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

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

21.08.2014, 22:16. Просмотров 762. Ответов 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 ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14639 / 6600 / 1045
Регистрация: 02.05.2013
Сообщений: 10,874
Завершенные тесты: 1
21.08.2014, 22:23     Перегрузка оператора + для сложения двух экземпляров класса #2
Реализовать его как свободную функцию (не член класса).
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 22:24     Перегрузка оператора + для сложения двух экземпляров класса #3
1) не писать так, а сначала "Привет" привести к типу вашего класса
2)зафрендить operator+(const char* str, const str_type& rhs)
gromo
 Аватар для gromo
367 / 266 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
21.08.2014, 22:43     Перегрузка оператора + для сложения двух экземпляров класса #4
aLarman, френдить функции плохо с точки зрения инкапсуляции. Лучше как сказал Убежденный, + не explicit конструктор.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 23:04     Перегрузка оператора + для сложения двух экземпляров класса #5
gromo, чет не ясно чем это плохо), расскажите?
а он имел ввиду разве не friend ф-цию? а если не ее, то как получить доступ к закрытым членам класса?
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,918
Записей в блоге: 17
21.08.2014, 23:18     Перегрузка оператора + для сложения двух экземпляров класса #6
Цитата Сообщение от gromo Посмотреть сообщение
френдить функции плохо с точки зрения инкапсуляции
Ну применение френда в данном случает стандартное решение.
ASCII
 Аватар для ASCII
87 / 59 / 9
Регистрация: 15.12.2013
Сообщений: 385
Завершенные тесты: 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++
6548 / 3968 / 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
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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++ Перегрузка operator< для двух экземпляров класса отрезок
Перегрузка оператора сложения C++
C++ Перегрузка оператора для класса
Перегрузка оператора +, для сложения координат 2х векторов C++
Перегрузка оператора + для класса Date C++

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

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

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