Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
#1

Присваивание значений одного класса другому. - C++

19.08.2010, 15:32. Просмотров 1412. Ответов 19
Метки нет (Все метки)

Скажите, могу ли я присвоить значения одного объекта класса другому объекту того же класса?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class card
{
//код код код
};
 
int main()
{
card c1[52], c2[52], c3[x][y];
// заполняем класс c1
// в цикле:
c2[j] = c1[j]; //возможно ли?
c3[x][y] = c1[j] // а так?
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2010, 15:32     Присваивание значений одного класса другому.
Посмотрите здесь:

C++ Полиморфизм, наследование и приведение экземпляров класса одного к другому
Передача файла из одного ПК к другому C++
Присваивание указателей, вызов оператора присваивания класса C++
C++ Присваивание значений членам класса
C++ В чем заключается наследование одного класса другому?
Присваивание объекта базового класса наследуемому C++
C++ Присваивание значений параметрам в рекурсивной функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dzhej-Dzhej
Заблокирован
19.08.2010, 15:37     Присваивание значений одного класса другому. #2
Цитата Сообщение от half-node Посмотреть сообщение
c2[j] = c1[j]; //возможно ли?
да
Цитата Сообщение от half-node Посмотреть сообщение
c3[x][y] = c1[j] // а так?
нет(с3[число от 0 до х-1][число от 0 до у-1])
выход за пределы диапазона массива
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 15:40  [ТС]     Присваивание значений одного класса другому. #3
Подождите...Индексы это просто кол-во выделяемой памяти, правильно?
дело в том, что мне c1[52] нужно разделить на четыре человека.
Я, не мудурствуя лукаво, создал объект того же класса что и c1, только c3[4][13].
По сути, c3[0][0] = c1[0], я просто передаю данные объекта с1 в объект с3..а индексы, это уже дела массивов. Нет?)
Dzhej-Dzhej
Заблокирован
19.08.2010, 15:44     Присваивание значений одного класса другому. #4
правильно, но нужно писать
c3[j/4][j%4] = c1[j];
а то сишка такая штука, что может записать данные мимо массива в рядом стоящие переменные,
я когда-то долго пропарился из-за такой мелочи
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
19.08.2010, 15:50     Присваивание значений одного класса другому. #5
half-node, при правильной организации цикла отработают оба варианта. Правда, есть один тонкий момент - если в классе нет полей с динамически создающимися данными (требующими выделения памяти оператором new), то конструктор копирования, созданный компилятором по умолчанию, сам прекрасно справится. Судя по задаче - как-раз Ваш случай. В противном случае нужно будет перегрузить конструктор копирования и оператор присваивания...
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 15:53  [ТС]     Присваивание значений одного класса другому. #6
Цитата Сообщение от easybudda Посмотреть сообщение
half-node, при правильной организации цикла отработают оба варианта. Правда, есть один тонкий момент - если в классе нет полей с динамически создающимися данными (требующими выделения памяти оператором new), то конструктор копирования, созданный компилятором по умолчанию, сам прекрасно справится. Судя по задаче - как-раз Ваш случай. В противном случае нужно будет перегрузить конструктор копирования и оператор присваивания...
Для меня, на данный момент, бОльшее из того, что вы сказали - Филькина грамота
"Это мы не проходили!"(с), скажем так. Мне нужно решить проблему зная только обычные массивы и классы.

В принципе, метод Dzhej-Dzhej работает. Спасибо!

п.с. Правда, опять выскакивает один лишний символ..(где ваши пресловутые переполнения массивов? )
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
19.08.2010, 16:01     Присваивание значений одного класса другому. #7
Цитата Сообщение от half-node Посмотреть сообщение
мне c1[52] нужно разделить на четыре человека.
Я, не мудурствуя лукаво, создал объект того же класса что и c1, только c3[4][13].
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
 
class Foo{};
 
int main(){
    const int r = 4;
    const int c = 13;
    Foo a[r * c], b[r][c];
    //...
 
    for(int i = 0, it = 0; i < r; ++i)
        for(int j = 0; j < c; ++j){
            b[i][j] = a[it];
            ++it;
        }
    return 0;
}
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 16:07  [ТС]     Присваивание значений одного класса другому. #8
Цитата Сообщение от ISergey Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
 
class Foo{};
 
int main(){
    const int r = 4;
    const int c = 13;
    Foo a[r * c], b[r][c];
    //...
 
    for(int i = 0, it = 0; i < r; ++i)
        for(int j = 0; j < c; ++j){
            b[i][j] = a[it];
            ++it;
        }
    return 0;
}
Кстати, да! Спасибо!
Dzhej-Dzhej
Заблокирован
19.08.2010, 16:08     Присваивание значений одного класса другому. #9
пресловутые переполнения массивов?
я когда-то карты писал в шестой вижуал-студии, так вот,
все работало хорошо, но раз в несколько раздачь вылетала непонятно откуда
взявшаяся карта и падала в левый верхний угол формы
я две недели с ума сходил
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 16:59  [ТС]     Присваивание значений одного класса другому. #10
Ну, надеюсь, когда я изучу динамические массивы - такая беда будет обходить меня стороной
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.08.2010, 17:07     Присваивание значений одного класса другому. #11
half-node, Динамика - зло, хоть и неизбежное. Вектор (хотя тоже динамика, но не надо следить за выделением/очисткой памяти) лучше.
ISergey
19.08.2010, 18:03
  #12

Не по теме:

Lavroff, Да ладно.. прям там зло

ForEveR
19.08.2010, 18:15
  #13

Не по теме:

ISergey, Страуструп на это прямо намекает) И советует не юзать ни динамику, ни многомерные массивы. Выделение/очищение памяти - в большом кол-ве случаев приводит в ошибкам. Причем не всегда легким для распознавания. Если уметь пользоваться - другое дело) Но все равно, зачем?)

half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 22:49  [ТС]     Присваивание значений одного класса другому. #14
Цитата Сообщение от Lavroff Посмотреть сообщение
half-node, Динамика - зло, хоть и неизбежное. Вектор (хотя тоже динамика, но не надо следить за выделением/очисткой памяти) лучше.
Т.е. есть фиксированный размер массивов, динамический, и векторный? Правильно я понял?
neske
1463 / 830 / 69
Регистрация: 26.03.2010
Сообщений: 2,830
19.08.2010, 23:04     Присваивание значений одного класса другому. #15
half-node, не совсем.
Почитайте книги про стандартную библиотеку шаблонов, STL.
Это действительно интересно)
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.08.2010, 23:04     Присваивание значений одного класса другому. #16
half-node, Простые массивы (массивы "низкого" уровня) могут быть либо постоянного (фиксированного размера),либо динамические (под которые выделяется память во время работы программы, в С++ для этого используется new).
std::vector<T> - контейнер из стандартной библиотеки шаблонов (STL). Об использовании вектора читайте либо в книгах, либо в интернете, ну либо здесь на форуме.
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
20.08.2010, 14:19     Присваивание значений одного класса другому. #17
Цитата Сообщение от half-node Посмотреть сообщение
C++
1
c2[j] = c1[j]; //возможно ли?
Оно то возможно, но вы понимаете какой будет результат таких действий? И как потом будут вести себя эти две переменные? Если вам именно это и надо, то да, иначе только через метод копирования объектов или конструктор копирования
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
20.08.2010, 14:25  [ТС]     Присваивание значений одного класса другому. #18
Кароч ясно. До STL пока не добрался. Рано еще.
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
20.08.2010, 14:33     Присваивание значений одного класса другому. #19
half-node, т.е. вы понимаете что меняя, например, c2[j] вы тем самым меняете c1[j] ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2010, 15:03     Присваивание значений одного класса другому.
Еще ссылки по теме:

Присваивание переменной одного значения из нескольких заданных C++
C++ Присваивание объекта класса ofstream
C++ Переход из одного интервала к другому
C++ Присваивание элементов двумерного массива другому двумерному массиву
C++ Как передать параметры конструктора одного класса другому?

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

Или воспользуйтесь поиском по форуму:
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
20.08.2010, 15:03  [ТС]     Присваивание значений одного класса другому. #20
Цитата Сообщение от M128K145 Посмотреть сообщение
half-node, т.е. вы понимаете что меняя, например, c2[j] вы тем самым меняете c1[j] ?
Да, конечно. Это и есть цель. Одну и ту же колоду я заполняю, потом ту же колоду, не побоюсь этого слова, "рандомлю", а потом уже раздаю ее 4м разным людям. По-моему все логично.
Yandex
Объявления
20.08.2010, 15:03     Присваивание значений одного класса другому.
Ответ Создать тему
Опции темы

Текущее время: 02:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru