5 / 5 / 2
Регистрация: 15.11.2010
Сообщений: 58

Перегрузка оператора ‘=’

26.10.2011, 20:58. Показов 941. Ответов 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
29
30
31
32
33
34
struct HOUSE{
    int a;
    int b;
    int c;
};
 
template <class T_str>
class summary_list {
    T_str *tmp;
public:
    //не знаю как тут правильно сделвть((
    T_str& operator = (T_str &tl){return *tmp;};//ошибка
    T_str& operator = (){return *tmp;};//ошибка
    
};
 
 
int main(){
    //проверка работоспособности 
    summary_list<int> t1;
    int k1=5;
    t1=k1;
    k1=t1;
 
    summary_list<HOUSE> t2;
    HOUSE k2;
    k2.a=5;
    k2.b=6;
    k2.c=10;
 
    t2=k2;
    k2=t2;
           return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2011, 20:58
Ответы с готовыми решениями:

Перегрузка оператора
Помогите доделать задание... Это в классе метод, осуществляющий ввод значений полей класса с клавиатуры; метод, осуществляющий...

Перегрузка оператора +
Всем привет, проблема на этот раз такая. Для того, чтобы выучить классы, я пишу некое подобие класса string. Сложность вот в чем. Возникла...

Перегрузка оператора[]
Пример взят из книги Лафоре, тема перегрузка операций. Выдает ошибки: 1.Требуется идентификатор. sa1 = i * 10; 2.Использование...

3
Заблокирован
26.10.2011, 21:06
Цитата Сообщение от kilik Посмотреть сообщение
Подскажите, пожалуйста, можно ли как-то перегрузить оператор равно.
Чтобы можно было его использовать как с правой, так и с левой стороны. С любым типом данных.
На примере изложил суть проблемы:
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
struct HOUSE{
    int a;
    int b;
    int c;
};
 
template <class T_str>
class summary_list {
    T_str *tmp;
public:
    //не знаю как тут правильно сделвть((
    T_str& operator = (T_str &tl){return *tmp;};//ошибка
    T_str& operator = (){return *tmp;};//ошибка
    
};
 
 
int main(){
    //проверка работоспособности 
    summary_list<int> t1;
    int k1=5;
    t1=k1;
    k1=t1;
 
    summary_list<HOUSE> t2;
    HOUSE k2;
    k2.a=5;
    k2.b=6;
    k2.c=10;
 
    t2=k2;
    k2=t2;
           return 0;
}
Это не "оператор равно", а оператор присваивания. Оператор присваивания должен быть нестатическим членом класса ровно с одним параметром.

Поэтому в вашем случае, когда вы хотите целочисленному объекту присвоить значение объекта типа класса, вам нужно написать функцию-член класса преобразования объекта класса в целочисленный тип. Тогда, когда компилятор встретит подобный код, когда слева от знака присваивания стоит целочисленный объект, он преобразует ваш объект класса, стоящий справа от знака присваивания, в этот целочисленный тип.
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
26.10.2011, 21:12
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
37
38
39
40
41
42
43
44
45
46
47
48
struct HOUSE{
        int a;
        int b;
        int c;
};
 
template <class T_str>
class summary_list {
        T_str *tmp;
public:
        summary_list() {}
        summary_list(T_str& value) {tmp = &value;}
        T_str& operator=(T_str &tl)
        {
            tmp = &tl;
            return tl;
        };
        summary_list& operator=(const summary_list &tl)
        {
            if (this == tl) return *this;
            tmp = tl.tmp;
            return *this;
        };
        summary_list(const summary_list<T_str>& t)
        {
            tmp = t.tmp;
        }
        operator T_str() { return *tmp; }
};
 
 
int main(){
        //проверка работоспособности 
        summary_list<int> t1;
        int k1=5;
        t1=k1;
        k1=t1;
 
        summary_list<HOUSE> t2;
        HOUSE k2;
        k2.a=5;
        k2.b=6;
        k2.c=10;
 
        t2=k2;
        k2=t2;
           return 0;
}
оно скомпилировалось, но в смысл я не вдавался
здесь нужно использовать конструктор копирования
и оператор приведения типа
1
5 / 5 / 2
Регистрация: 15.11.2010
Сообщений: 58
26.10.2011, 21:27  [ТС]
Огромное Спасибо за помощь.
Буду разбираться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2011, 21:27
Помогаю со студенческими работами здесь

перегрузка оператора +
Не могу понять: в 184 строке отказывается работать. Без нее - все нормально. Скорее всего неправильно переопределил +.... Но если...

Перегрузка оператора '='
Не давно стал изучать С++ и дошёл до перегрузок операторов, и с книги написал пример, и не могу в полной мере его понять, объясните...

Перегрузка оператора ==
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не получается Вот виртуальная ф-ция, которую я вызываю в...

Перегрузка оператора ++
Что делает оператор ++ при его перегрузке?

Перегрузка оператора <<
Добрый пень! подскажите как написать код для реалилизации следующего требования: SpecialPrint &lt;&lt; &quot;text&quot; &lt;&lt;...


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

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

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru