Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
11 / 11 / 2
Регистрация: 23.12.2012
Сообщений: 45

Перегрузка операторов

19.11.2013, 20:37. Показов 2170. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Hello world! Изучаю C++, сейчас дошёл до классов, а точнее до перегрузки операторов. Решил в учебных целях написать класс, который может хранить строку, а также прибавлять её к другой строке. И всё бы хорошо, но вот тут для меня открылась частичка волшебства... Я делал перегрузку операторов "+" и "+=" чтоб класс нормально прибавлял строку, которая в объекте, к сторонней строке и удобно записывался (например obj1=obj2+"qwerty" или например obj1+="qwerty"), с оператором "+=" всё норм, а вот оператор "+" у меня никак не хотел прибавлять, он возвращал значение 1 операнда без изменения. Я решил проверить, что может у меня где-то в самой функции не прибавляет строку, и добавил в код проверку (обычный вывод результата) и когда я ввёл проверку всё отлично прибавилось, но когда я удалил проверку, то всё также упорно класс не хотел прибавлять... Вот пример вышесказанного:

classias.h
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
using namespace std;
class my_str
{
    char st[256]; // собственно сама строка
public:
    my_str(){}
    my_str(char* inst)
    {
        strcpy(st,inst);
    }
    void show()
    {
        cout<<st<<endl;
    }
    void operator +=(char* str1)
    {
        strcat(st,str1);
    }
    char* operator +(char* str1)
    {
        char temp_st[256]; // будет хранить результат дабы не менять основной символьный массив
        strcpy(temp_st,st);
        strcat(temp_st,str1);
        cout<<"---> "<<temp_st<<endl; // та самая проверка значения у temp_st, и если эта строка присутствует, то оператор "+" нормально работает, без этой строки он видимо возращает такое же значение как и в st
        return temp_st;
    }
};
основной исходник .cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string.h>
#include "classias.h"
using namespace std;
int main()
{
    my_str a, b;
    a="dde";
    b="ccvbn";
    a=a+"!!@";
    b+="*77^";
    a.show(); // если не вписывать в classias.h 24 строку, то выведет dde, а если вписать, то выведет, как и положено, dde!!@
    b.show(); // тут, как и положено, выведет ccvbn*77^
    return 0;
}
В общем, что за сие шаманство и что за бубен тут нужно применять?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2013, 20:37
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов
Решите пожалуйсто задачу: Разработайте программу, в которой реализована перегрузка оператора «^». Оператор «^» должен возводить...

Перегрузка операторов /=, +=, -=
Добрый день. Есть 3 дроби F1, F2, F3 и нужно перегрузить оператор /=, у меня это выглядит так: void operator/=(Fraction f2) { ...

20
Модератор
Эксперт С++
 Аватар для zss
13794 / 10986 / 6492
Регистрация: 18.12.2011
Сообщений: 29,287
20.11.2013, 17:17
Студворк — интернет-сервис помощи студентам
Можно Вот так:
C++
1
2
3
4
5
6
7
8
friend const char* operator + (const my_str& l, const char* r)
{
    char* temp_st=new char[250];// надо выделить память, которая не удаляется.
    strcpy(temp_st,l.st);
    strcat(temp_st,r);
    cout<<temp_st<<endl; // с этой строкой он прибавляет, без неё никак не хочет
    return temp_st;
}
Не забудьте, что возвращенную память в этом случае надо удалять в вызывающей программе.

Но я бы перегрузил такой оператор
C++
1
friend const my_str operator + (const my_str& l, const char* r)
т.е. string складываем с char* и записываем в string.
Тогда проблемы с выделением памяити не будет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2013, 17:17

перегрузка операторов
Товарисссчи, что значит запись: CVector2D::operator+(CVector2D const&amp; v1)const файл *срр и чем отличается от CVector2D const operator...

Перегрузка операторов
Всем привет. Читаю Страуструпа, дошел до перегрузки операторов и наткнулся там вот на такое высказывание: Реализуем...

Перегрузка операторов
Есть у меня свой тип рациональных дробей, и вот мне надо перегрузить оператор &quot;+&quot; таким образом, что бы работала такая строчка...

Перегрузка операторов
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби...

перегрузка операторов
Всем привет. Дошел до темы перегрузки операторов и возникло два вопроса. Первый: Чем отличается вот этот код String ...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru