Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.11.2021
Сообщений: 105

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

13.10.2022, 09:48. Показов 613. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
хочу реализовать оператор +, только начал изучать это дерьмо, помогите плиз. компилятор выдает огромную кучу текста, которую я решил не прикладывать к коду, ибо слишком много

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
#include <iostream>
#include <cstring>
using namespace std;
 
class Counter {
public:
    Counter(int sec) {
        seconds = sec;
    }
    void display()  {
        std::cout << seconds << " seconds" << std::endl;
    }
int seconds;
    Counter operator + (Counter c1, Counter c2) {
    return Counter(c1.seconds + c2.seconds);
}
   
 };
 
 
int main() {
Counter a=9, b=2, k;
k=a+b;
cout<<k;
 
 
return 1;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2022, 09:48
Ответы с готовыми решениями:

Перегрузка оператор ввода вывода и перегрузка арифметических операторов С++
Создать класс Time для работы со временем в формате «час:минута:секунда». Класс должен включать в себя не менее четырех функций...

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

Перегрузка операторов
Помогите, пожалуйста, решить задачу При создании собственных типов данных с помощью классов наиболее общей операцией является проверка...

3
106 / 93 / 44
Регистрация: 26.07.2015
Сообщений: 197
13.10.2022, 10:37
Лучший ответ Сообщение было отмечено SAVCHink как решение

Решение

На это строчку
C++
1
Counter a = 9, b = 2, k;
компилятор жалуется потому что переменная k создается без параметров, а единственный конструктор в классе Counter принимает один int. Значит надо добавить конструктор без параметров.

Кононичная форма оператора + во такая
C++
1
T T::operator+(const T2 &b) const;
Т.е. первый аргумент, в твоём случае c1, принимается через this, а второй уже передается параметром.

Стандартный cout не знает как форматировать и превратить с строчку твой класс, ты спечиально для этого написал метод display, вот и вызывай его вместо вставки в cout.

В итоге всё будет выглядеть так:
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
#include <iostream>
#include <cstring>
using namespace std;
 
class Counter {
public:
    Counter(int sec) {
        seconds = sec;
    }
    Counter() { }
 
    void display() {
        std::cout << seconds << " seconds" << std::endl;
    }
    int seconds;
    Counter operator + (Counter& c2) {
        return Counter(this->seconds + c2.seconds);
    }
 
};
 
 
int main() {
    Counter a = 9, b = 2, k;
    k = a + b;
    k.display();
 
    return 1;
}
1
0 / 0 / 0
Регистрация: 02.11.2021
Сообщений: 105
13.10.2022, 11:29  [ТС]
а как сделать то же самое, но только со строками?
0
106 / 93 / 44
Регистрация: 26.07.2015
Сообщений: 197
13.10.2022, 12:05
Если со стандартным string, то просто заменив типы везде
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
#include <iostream>
#include <cstring>
using namespace std;
 
class Counter {
public:
    Counter(string s) {
        str = s;
    }
    Counter() { }
 
    void display() {
        std::cout << "str: " << str << std::endl;
    }
    string str;
    Counter operator + (Counter& c2) {
        return Counter(this->str + c2.str);
    }
 
};
 
 
int main() {
    Counter a("asd"), b("fgh"), k;
    //Counter a = string("asd"), b = string("fgh"), k;
    k = a + b;
    k.display();
 
    return 1;
}
Отличие только во моменте создания экземпляра. Для int это было через присвоение(которое вызывало конструктор), а здесь через прямой вызов конструктора с передачей пареметров в скобках. Через присвоение сделать то же можно, но для этого должны совпадать типы. Формально у "asd" тип const char[4], к string это можно преобразовать вызвав конструктор string-a и после этого присвоение то же работает(в закомментированной строке)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2022, 12:05
Помогаю со студенческими работами здесь

Перегрузка операторов
Здравствуйте! Сделал класс квадратной матрицы. Содержит конструктор по умолчанию, конструктор с параметрами, конструктор копирования,...

Перегрузка операторов
Создать следующие классы. В каждом классе должны быть наборы конструкторов (в том числе по умолчанию и копирования), деструктор. Для...

Перегрузка операторов
Задание такое-Составить описание класса для представления комплексных чисел. Обеспечить выполнение операций сложения, вычитания и умножения...

Перегрузка операторов
Ребят всем привет , у меня такое задание. Создать динамический класс для работы со строками. Максимальная длина последовательности - 254....

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru