С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.11.2022
Сообщений: 17
1

Требуется пофиксить проблему с оператором присваивания массивов

16.12.2022, 12:01. Показов 253. Ответов 6

Author24 — интернет-сервис помощи студентам
Такая проблема: имеется оператор присваивания массивов:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Simple& Simple::operator=(const Simple& other) {
    if (type == 0 && other.type == 0) {
        if (mass != nullptr) {
            delete[] mass;
            mass = nullptr;//константа нулевого указателя
        }
        size = other.size;
        mass = new float[size];
        for (auto i = 0; i < size; i++) {
            mass[i] = other.mass[i];
        }
        return *this;
    }
    else if (type ==1 && other.type == 1) {
        if (mass_int != nullptr) {
            delete[] mass_int;
            mass_int = nullptr;//константа нулевого указателя
        }
        size = other.size;
        mass_int = new int[size];
        for (auto i = 0; i < size; i++) {
            mass_int[i] = other.mass_int[i];
        }
        return *this;
    }
    else if (type == 0 && other.type == 1){
        if (mass != nullptr) {
            delete[] mass;
            mass = nullptr;//константа нулевого указателя
        }
        size = other.size;
        type = other.type;
        mass_int = new int[size];
        for (auto i = 0; i < size; i++) {
            mass_int[i] = other.mass_int[i];
        }
        return *this;
    }
    else if (type == 1 && other.type == 0){
        if (mass_int != nullptr) {
            delete[] mass_int;
            mass_int = nullptr;//константа нулевого указателя
        }
        size = other.size;
        type = other.type;
        mass = new float[size];
        for (auto i = 0; i < size; i++) {
            mass[i] = other.mass[i];
        }
        return *this;
    }
    else if (type != 1 && type != 0){
        if (mass != nullptr) {
            delete[] mass;
            mass = nullptr;//константа нулевого указателя
        }
        size = other.size;
        mass = new float[size];
        for (auto i = 0; i < other.size; i++) {
            mass[i]=1;
            mass[i] = other.mass[i];
        }
        return *this;
    }
 
}
Проблема с последним условием. Т.е. при ситуации
C++
1
2
3
4
Simple b(3, 1);
    b.show();
    b = a;
    b.show();
всё работает, а при
C++
1
2
Simple c = a;
    c.show();
выдает рандомные значения, но сохраняет правильную длину. Пояснение: type - это bool переменная, где 0- это флотовский массив, а 1- интовский. Конкретно интересует последнее условие кода, который я написал выше. В случае объявления Simple c = a (Simple- класс), у нас массив c не имеет ничего: ни типа данных, ни размерности и из-за этого получаются рандомные значения, но с правильной длиной. Хелпаните! P.S. Первые 4 условия верны и работают корректно. Проблема с последним.
Была идея
C++
1
else if (type == NULL)
, но так не работает
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2022, 12:01
Ответы с готовыми решениями:

Требуется пофиксить проблему с оператором присваивания массивов
Такая проблема: имеется оператор присваивания массивов: Simple&amp; Simple::operator=(const Simple&amp;...

Как пофиксить проблему в программе с шаблоном класса?
Доброго времени суток! Задание такое: &quot;Создать шаблонный класс – стек на основе статического...

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

Класс с перегруженным оператором присваивания
Добрый день, задали в университете написать класс с перегрузкой оператора присваивания, с...

6
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
16.12.2022, 12:04 2
Цитата Сообщение от artrone Посмотреть сообщение
а при
C++
1
2
Simple c = a;
 c.show();
выдает рандомные значения,
А это не присваивание. Это инициализация. Здесь конструктор копирования работает.
0
0 / 0 / 0
Регистрация: 24.11.2022
Сообщений: 17
16.12.2022, 12:16  [ТС] 3
да, но некорректно

Добавлено через 49 секунд
срабатывает 4 условие почему-то

Добавлено через 15 секунд
срабатывает 4 условие почему-то
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
16.12.2022, 12:20 4
artrone, ну так вы в вопросе предоставили только реализацию оператора присваивания, а реализацию конструктора копирования не предоставили.
У вас есть у класса конструктор копирования?
0
0 / 0 / 0
Регистрация: 24.11.2022
Сообщений: 17
16.12.2022, 12:31  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Simple::Simple(Simple& other) {
    size = other.size;
    if (type == 0) {
        mass = new float[size];
        for (auto i = 0; i < size; i++) {
            mass[i] = other.mass[i];
        }
    } else {
        mass_int = new int[size];
        for (auto i = 0; i < size; i++) {
            mass_int[i] = other.mass_int[i];
        }
    }
}
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
16.12.2022, 12:33 6
Лучший ответ Сообщение было отмечено artrone как решение

Решение

artrone, а почему type не копируете из other? size вот копируете, а type нет.
1
0 / 0 / 0
Регистрация: 24.11.2022
Сообщений: 17
16.12.2022, 12:36  [ТС] 7
спасибо, сработало!
0
16.12.2022, 12:36
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2022, 12:36
Помогаю со студенческими работами здесь

разобраться с конструктором перемещения и оператором присваивания перемещением
Доброе время суток! Есть класс комплексных чисел. Поля - double Im, double Re, char * nn (то есть...

Как можно заменить условный оператор, оператором присваивания?
Прошу помочь с заданием по c++ Заменить оператором присваивания следующий условный оператор: ...

Программа сортировки чисел по убыванию с вводом переменных оператором присваивания
CLS A(1) A(2) A(3) A(4) A(5) PRINT “ Числа до сортировки” PRINT A(1); A(2); A(3); A(4); A(5)...

Написать код c использованием оператора foreach, while или repeat и с оператором присваивания
Помогите, пожалуйста, написать код на pascalABC.Net c использованием оператора foreach, while или...

Фриланс требуется пофиксить баги на сайте
Требуется фикс кроссплатформенности сайта с виртуе мартом и восстановление модуля yandex маркет...

Требуется пофиксить лёгкую программу. Игра запоминалка
Пишу лёгкую игру для школьного проекта. Нужно сделать игру запоминалку. Цель запомнить цвета и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru