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

Перегрузка оператора присваивания и двухмерный массив

02.01.2017, 16:05. Показов 4235. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создал класс, он в себе содержит переменную, которая представляет собой двухмерный массив. Нужно сделать так, чтобы объекту класса можно было присвоить переменную-двухмерный массив.
То есть, если переменная Level - объект класса, а Level_Mass - это двухмерный массив, то нужно, чтобы работало выражение:
Level = Level_Mass;
Я пытался сделать, чтобы работало, но не получилось. Помогите, пожалуйста, желательно с объяснением. Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.01.2017, 16:05
Ответы с готовыми решениями:

Перегрузка оператора присваивания
При перегрузке оператора присвоения выдает ошибки cpp(58) : warning C4996: 'strcpy': This function...

Перегрузка оператора присваивания
Здравствуйте, недавно читал про перегрузку операторов и решил поупражняться с этим, однако на...

Перегрузка оператора присваивания
Доброго времени суток всем! Никак не могу правильно написать перегрузку оператора присваивания. ...

Перегрузка оператора присваивания
Доброго времени суток! Возник вопрос по поводу перегрузки оператора присваивания. Пример...

8
109 / 108 / 74
Регистрация: 18.11.2013
Сообщений: 304
02.01.2017, 16:17 2
Саша Перков, покажите как пытались делать?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
02.01.2017, 16:17 3
опуская вопрос зачем это нужно, какой у вас массив имеется ввиду? динамический тип** или статический тип[][]? в первом случае все просто. во втором нужно знать размер границ массива(за исключением первой)
0
1 / 1 / 0
Регистрация: 07.08.2014
Сообщений: 72
02.01.2017, 16:28  [ТС] 4
Цитата Сообщение от cybeuser Посмотреть сообщение
Саша Перков, покажите как пытались делать?
C++
1
2
3
4
5
6
7
8
9
10
11
c_Level c_Level::operator=(char a[x][y])
{
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            level[i][j] = a[i][j];
        }
    }
    return *this;
}
Вообще надо бы ссылкой передавать массив. Но как я не знаю.

Добавлено через 7 минут
Цитата Сообщение от retmas Посмотреть сообщение
опуская вопрос зачем это нужно, какой у вас массив имеется ввиду? динамический тип** или статический тип[][]? в первом случае все просто. во втором нужно знать размер границ массива(за исключением первой)
Границы массива известны и он статический.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
02.01.2017, 16:37 5
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
class c_Level
{
public:
    template<int m, int n>
    c_Level& operator=(char (&mas)[m][n])
    {
        static_assert(m == DIM1 && n == DIM2, "Bounds!");
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                level[i][j] = mas[i][j];
            }
        }
        return *this;
    }
private:
    char level[DIM1][DIM2];
};
 
int main()
{
    c_Level c;
    char m[2][3] = {
        { 1, 2, 3},
        { 4, 5, 6}
    };
    c = m;
    return 0;
}
2
1 / 1 / 0
Регистрация: 07.08.2014
Сообщений: 72
02.01.2017, 16:45  [ТС] 6
Спасибо. А можно ли присвоить объекту класса константу? Ну, то есть двухмерный массив, который константа.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
02.01.2017, 16:49 7
то бишь так?
C++
1
2
3
4
5
    c_Level c;
    c = {
        { 1, 2, 3},
        { 4, 5, 6}
    };
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
02.01.2017, 16:56 8
Лучший ответ Сообщение было отмечено Саша Перков как решение

Решение

retmas, а я думаю, что его вопрос решается добавлением const к ссылке на массив.
C++
1
2
template<int m, int n>
c_Level& operator=(char const (&mas)[m][n])
1
1 / 1 / 0
Регистрация: 07.08.2014
Сообщений: 72
02.01.2017, 17:05  [ТС] 9
Нет. Мы создаем константу типа:
const char Level_Mass[X][Y];
И вот ее уже присваиваем объекту класса.

Добавлено через 6 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
retmas, а я думаю, что его вопрос решается добавлением const к ссылке на массив.
Черт, ты прав. Тупая ошибка, забыл что надо const добавить. Огромное спасибо.
0
02.01.2017, 17:05
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.01.2017, 17:05
Помогаю со студенческими работами здесь

Перегрузка оператора присваивания
Здравствуйте! Помогите, пожалуйста разобраться с перегрузкой оператора присваивания. Нужно...

Перегрузка оператора присваивания
Вот есть такой класс template&lt;typename TT&gt; class Matrix { public:...

Перегрузка оператора присваивания
MyArray&amp; operator=( MyArray &amp;arrInt2 ) //Зачем писать MyArray&amp; operator?А почему не MyArray...

Перегрузка оператора присваивания
мне надо было реализовать конструкторы, деструктор, оператор присваивания, функции ввода /...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru